与古代田忌的应对方法差不多,现在我们任然可以用贪心的思路解答。
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;
}