POJ 2287 Tian Ji -- The Horse Racing

思路:递增排序后比较,核心是如果最快没有别人快,一定会输,就用最慢的去比,这样留下较好的;

找到对面最慢的比自己最慢的还慢,一定会赢,就用最慢的去比,留下较好的。

 

 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

posted @ 2019-02-24 23:37  付玬熙  阅读(204)  评论(0编辑  收藏  举报