poj hdu Tian Ji -- The Horse Racing 贪心

田忌赛马
先把田忌和国王的马排序。
每次取田忌的最快的马与国王最快的马比较,有三种情况。
一,田忌最快的马比国王最快的快,那么直接拿田忌最快的马去赢国王最快的马。
二,田忌最快的马比国王最快的慢,那么拿田忌最慢的马去输国王最快的马。
三,田忌最快的马与国王最快的马速度一样。这时就比较麻烦一点了。
      先拿田忌最慢的马与国王最慢的马比较。
      若比国王快,直接去赢掉国王最慢的马。
      否则田忌最慢的马再去与国王最快的马比较,此时这两只马必定是要比赛的,只是比较一下速度而以。
 
给一些测试数据:
输入:
2
4 6
3 6
2
4 6
5 6
2
0 3
0 4
2
0 3
0 2
3
6 7 8
6 6 7
3
1 3 3
2 2 3
3
1 3 5
2 2 5
3
7 8 8
6 8 9
3
4 5 5
5 5 5
4
5 6 7 8
2 4 6 7
输出:
200
0
0
200
400
200
200
0
-200
800
 
 
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
       int a[1005],b[1005],n,i,a_H,a_L,b_H,b_L,sum;
       while(scanf("%d",&n),n!=0)
       {
               for(i=0;i<n;i++)
               scanf("%d",&a[i]);
               for(i=0;i<n;i++)
               scanf("%d",&b[i]);
               sort(a,a+n);
               sort(b,b+n);
               sum=0;
               a_H=0;a_L=n-1;
               b_H=0;b_L=n-1;
               while(b_H<=b_L)
               {
                    if(a[a_L]>b[b_L])
                    {
                         sum+=200;
                         a_L--;b_L--;
                    }
                    else if(a[a_L]<b[b_L])
                    {
                         sum-=200;
                         a_H++;b_L--;
                    }
                    else
                    {
                        while(a_H<=a_L)
                        {
                             if(a[a_H]>b[b_H])
                             {
                                  a_H++;
                                  b_H++;
                                  sum+=200;
                             }
                             else
                             {
                                   if(a[a_H]<b[b_L])
                                   sum-=200;
                                   b_L--;
                                   a_H++;
                                   break;
                             }
                        }
                    }
               }
                                   
               printf("%d\n",sum);  
       }
       return(0);  
}
posted @ 2011-04-21 19:00  CoderZhuang  阅读(151)  评论(0编辑  收藏  举报