您的位置:首页 > 其它

hdu 1052 Tian Ji -- The Horse Racing

2013-02-05 13:46 369 查看
贪心思路:田忌要用最小的代价(最慢的马)输一场比赛,而要耗费掉齐王最大的资源;齐王用最大的代价赢田忌,以最大的代价输田忌。
先把田忌和国王的马排序。
每次取田忌的最快的马与国王最快的马比较,有三种情况。
一,田忌最快的马比国王最快的快,那么直接拿田忌最快的马去赢国王最快的马。
二,田忌最快的马比国王最快的慢,那么拿田忌最慢的马去输国王最快的马。
三,田忌最快的马与国王最快的马速度一样。
      先拿田忌最慢的马与国王最慢的马比较。
      若田忌比国王快,直接赢掉国王最慢的马。
      否则田忌最慢的马再去与国王最快的马比。
     如果最快最慢的马都一样,用田忌最慢的马和国王最快的马比。
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