Tian Ji -- The Horse Racing 题解
__S08577__ · · 题解
题意
就是田忌赛马,赢一场比赛得+200银元,输了得-200银元,平局不加不减,求田忌最多能得到几个银元。
思路
这个题很显然是贪心,我们主要思想就是
如果田忌最快的马比齐王最快的马快,就直接去比;
如果田忌最慢的马比齐王最慢的马快,也直接去比;
如果田忌最快的马比齐王最快的马慢,就用田忌最慢的马去比;
如果田忌最慢的马比齐王最慢的马慢,就和齐王最快的马去比;
我们可以用类似指针的方法做,
当然,我们必须在前面sort一下,从小到大排一遍序。
代码
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int N=1e3+5;
int a[N],b[N];
signed main(){
int n;
while(cin>>n){
if(n==0) return 0;
for(int i=1;i<=n;i++) cin>>a[i];
for(int j=1;j<=n;j++) cin>>b[j];
sort(a+1,a+1+n);
sort(b+1,b+1+n);
int la,lb,ra,rb;
la=lb=1;//最慢的马
ra=rb=n;//最快的马
int res=0;
for(int i=1;i<=n;i++){
if(a[ra]>b[rb]){
res+=200;
ra--;
rb--;
}
else if(a[ra]<b[rb]){
res-=200;
la++;
rb--;
}
else if(a[la]>b[lb]){
res+=200;
la++;
lb++;
}
else{
if(a[la]<b[rb]){
res-=200;
la++;
rb--;
}
}
}
cout<<res<<endl;
}
}
这道题居然只有一个测试点!!