hdu 1052 Tian Ji -- The Horse Racing

贪心思路:田忌要用最小的代价(最慢的马)输一场比赛,而要耗费掉齐王最大的资源;齐王用最大的代价赢田忌,以最大的代价输田忌。
先把田忌和国王的马排序。
每次取田忌的最快的马与国王最快的马比较,有三种情况。
一,田忌最快的马比国王最快的快,那么直接拿田忌最快的马去赢国王最快的马。
二,田忌最快的马比国王最快的慢,那么拿田忌最慢的马去输国王最快的马。
三,田忌最快的马与国王最快的马速度一样。
          先拿田忌最慢的马与国王最慢的马比较。
          若 田忌 比国王快,直接赢掉国王最慢的马。
          否则田忌最慢的马再去与国王最快的马比。
     如果最快最慢的马都一样,用田忌最慢的马和国王最快的马比。
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
#define NUM 1005
int k[NUM],t[NUM];
int main()
{
    int n,i,j,kn,win;//i:己方最小,j:对方最小;两头往中间遍历
    while(cin>>n&&n!=0){
        for(i=0;i<n;i++)
            cin>>t[i];
        for(i=0;i<n;++i)
            cin>>k[i];
        sort(k,k+n);
        sort(t,t+n);
        win=0;kn=n;//n:己方最大,kn:对方最大
        for(i=0,j=0;i<n;){
            if(t[i]<k[j]){//无平局,且己方最小<对方最小
                i++;//拿最小拼对方最大
                kn--;
                win--;
            } else if(t[i]>k[j]){//无平局,且己方最小>对方最小
                i++;//直接赢
                j++;
                win++;
            } else {//己方最小=对方最小
                if(t[n-1]>k[kn-1]){//己方最大>对方最大
                    n--;kn--;//直接赢
                    win++;
                } else if(t[n-1]<k[kn-1]){//己方最大<=对方最大
 
                    i++;kn--;//拿最小拼对方最大
                    win--;
                } else if(t[n-1]==k[kn-1]){//最小与最大都与对方相等
                    if(t[i]<k[kn-1])//拿最小拼对方最大                        
                        win--;
					i++;kn--;//己方最小=对方最大,则平局:指针往前移,win不变
                   
 
                }
            }
			
        }
        cout<<win*200<<endl;		
    }
    return 0;
}

你可能感兴趣的:(HDU,HDU)