思路:递增排序后比较,核心是如果最快没有别人快,一定会输,就用最慢的去比,这样留下较好的;
找到对面最慢的比自己最慢的还慢,一定会赢,就用最慢的去比,留下较好的。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int a[1010],b[1010]; 6 int main() 7 { 8 int n; 9 while(scanf("%d",&n),n) 10 { 11 for(int i=1;i<=n;i++)//田忌 12 scanf("%d",&a[i]); 13 for(int i=1;i<=n;i++)//齐王 14 scanf("%d",&b[i]); 15 sort(a+1,a+1+n); 16 sort(b+1,b+1+n); 17 18 int t1=1,tr=n,q1=1,qr=n;//A序列首尾指针和B序列首尾指针 19 int sum=0;//赢得的银元 20 while(t1<=tr)//比赛还在继续 21 { 22 if(a[t1]<b[q1])//A最慢比B最慢更慢,那么用A最慢比B最快 23 { 24 qr--; 25 t1++; 26 sum-=200; 27 } 28 else if(a[t1]==b[q1])//相等 29 { 30 while(t1<=tr&&q1<=qr)//循环直到有一个为空 31 { 32 if(a[tr]>b[qr])//A最快>B最快,比,赢一次 33 { 34 qr--; 35 tr--; 36 sum+=200; 37 } 38 else//用A最慢跟B最快比,输一次,退出while 39 { 40 if(a[t1]<b[qr]) 41 { 42 sum-=200; 43 } 44 t1++; 45 qr--; 46 break; 47 } 48 } 49 } 50 else//A最慢>B最慢,比,赢一次 51 { 52 t1++; 53 q1++; 54 sum+=200; 55 } 56 } 57 printf("%d\n",sum); 58 } 59 return 0; 60 }
5.1.2