首页 > 代码库 > hdu 1052 Tian Ji -- The Horse Racing

hdu 1052 Tian Ji -- The Horse Racing

Tian Ji -- The Horse Racing 

题意:田忌赛马的问题,按照马的速度比较胜负,每胜一场得200分;求田忌比赛的最大值。


input
3
92 83 71
95 92 74


3
92 83 70
92 91 60
output
0
200

策略:1、田忌最快的马比王最快的马快,则直接比,赢一场。
2、田忌最快的马比王最快的马慢,则用田忌最慢的马和王最快的马比,输一场。
3、田忌最快的马和王最快的马速度一样:
        用田忌最慢的马比王最慢的马快,则田忌最慢的马和王最慢的马比,赢一场;
否则,田忌最慢的马和王最快的马比,若王的马快,则输一场,否则,平一场、
#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
#define N 1005
int cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int i,n;
    int a[N],b[N];
    while(scanf("%d",&n),n)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        for(i=0;i<n;i++)
        {
            scanf("%d",&b[i]);
        }
        sort(a,a+n,cmp);
        sort(b,b+n,cmp);
        int c1,c2,a1,a2,b1,b2;
        a1=b1=c1=c2=0;
        a2=b2=n-1;
        while(a1<=a2)
        {
            if(a[a1]>b[b1])   //田最快的马比王最快的马快
            {
                c1++;a1++;b1++;
            }
            else
            {
                if(a[a1]<b[b1])      //田最快的马比王最快的马慢
                {
                    c2++;a2--;b1++;
                }
                else            //田最快的马和王最快的马速度一样
                {
                    if(a[a2]>b[b2])  //田最慢的马比王最慢的马快
                    {
                        c1++;a2--;b2--;
                    }
                    else
                    {
                        if(a[a2]<b[b1])
                        {
                            c2++;
                        }
                        a2--;b1++;
                    }
                }
            }
        }
        printf("%d\n",(c1-c2)*200);
    }
    return 0;
}


input
3
92 83 71
95 92 74


3
92 83 70
92 91 60
output
0
200