思路:递增排序后比较,核心是如果最快没有别人快,一定会输,就用最慢的去比,这样留下较好的;
找到对面最慢的比自己最慢的还慢,一定会赢,就用最慢的去比,留下较好的。
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