hdu1052 Tian Ji -- The Horse Racing
田忌赛马,经典的贪心,不过很难想到呀,每次都用最快跟最快的,最慢的跟最慢的进行比较、判断
1)若田最快的比王最快的慢,则用最慢的跟王最快的比,输掉一局;反之,则赢了当然是最划算的选择了
2)若田最慢的比王最慢的还慢,则用最慢的跟王最快的比,输掉一局;反之,同上。
这俩步是贪心所在;
还有就是注意想等到情况……
看代码吧
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int s[1001],t[1001],n;
while(scanf("%d",&n)==1&n!=0)
{
for(int i=0;i<n;i++)
scanf("%d",&s[i]);
for(int i=0;i<n;i++)
scanf("%d",&t[i]);
qsort(s,n,sizeof(s[0]),cmp);//排序,速度慢的在前面
qsort(t,n,sizeof(t[0]),cmp);
int s1=0,s2=0,e1=n-1,e2=n-1;
int sum1=0,sum2=0;
while(s1<=e1&&s2<=e2)
{
if(s[s1]>t[s2])//最慢的马进行比较,
{
sum1++;s1++;s2++;
}
else if(s[s1]<t[s2])//若最慢的比王的还慢,则用来跟王的最快比
{
sum2++;s1++;e2--;
}
else {
if(s[e1]>t[e2])//最快的马进行比较
{
sum1++;e1--;e2--;
}
else if(s[e1]<t[e2])//若最快的比王的最快的还慢,则用最慢的更王的最快的比
{
sum2++;s1++;e2--;
}
else {
if(s[s1]==t[e2])//剩下的马均相等的情况
break;
else {
sum2++;s1++;e2--;
}
}
}
}
printf("%d\n",(sum1-sum2)*200);
}
return 0;
}

浙公网安备 33010602011771号