題解 P1650 【田忌賽馬】
阿新 • • 發佈:2018-12-13
與古代田忌的應對方法差不多,現在我們任然可以用貪心的思路解答。
1.田忌的馬甚至比齊王的馬快,那麼,直接將兩人最快的馬進行比賽,達到最優
2.田忌最快的馬比齊王最快的馬要慢,則與古代田忌的方案相同,用田忌最慢的馬消耗掉齊王最快的馬
3.齊王最快的馬與田忌最快的馬速度相當,又可以分成2種情況 程式:
#include <bits/stdc++.h>
using namespace std;
long n,money,x1,x2,y11,y2;
int a[10001],b[10001];
int main(){
cin>>n;
for(int i=0;i<n;i++ )//田忌的馬
cin>>a[i];
for(int i=0;i<n;i++)//齊王的馬
cin>>b[i];
sort(a,a+n);//先給各自的馬排序
sort(b,b+n);
x1=x2=0;//先給各個數值初始化
y11=y2=n-1;
while(x1<=y11){
if(a[y11]>b[y2]){//如果田忌的最快的馬比齊王最快的馬還要快,自然相比
money+=200;//增加錢
y11--;//兩邊的的馬的數量都減少一個
y2--;
}
else if(a[y11]<b[y2]){//如果田忌的最快的馬比齊王最快的馬要慢,則用田忌最慢的馬來消耗掉齊王最快的馬
money-=200;//錢要減少
x1++;
y2--;
}
else{//如果田忌最快的馬與齊王最快的馬速度相當
if(a[x1]>b[x2]){//如果田忌最慢的馬比齊王最慢的馬要快,則田忌會用他最慢的馬與齊王最慢的馬比賽
money+= 200;//錢要增加
x1++;
x2++;
}
else{//否則,用田忌最慢的馬消耗掉齊王最快的馬
if(a[x1]<b[y2])
money-=200;
x1++;
y2--;
}
}
}
cout<<money;
return 0;
}