您的位置:首页 > 其它

hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马,贪心】

2015-08-24 23:28 375 查看


Tian Ji -- The Horse Racing

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 22502 Accepted Submission(s): 6576



[align=left]Problem Description[/align]



想必大家都知道田忌赛马的故事吧,此处不再介绍故事内容;

.题目大意:给个整数n,表示田忌和齐王各有n匹马,接下来两行各有n个数,上一行表示田忌的马的速度,下一行表示齐王的马的速度;求田忌用孙膑教的方法最多能赢多少钱?

[align=left]Sample Input[/align]

3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18
0


[align=left]Sample Output[/align]

200
0
0


思路:先把两人的马拿去排序,升序或降序都可以(此处笔者用的是sort默认的,即升序);然后进行比较,比较有以下几种情况:{

①若田忌最快的马比齐王最快的马还快,直接胜出,二者次快的马变成最快的马;

②若田忌最快的马与齐王最快的马一样快,则比较二者最慢的马,比较最慢的马有以下几种情况:{

Ⅰ若田忌最慢的马比齐王最慢的马快,则田忌直接获胜,二者次慢的马变成最慢的马;

Ⅱ若田忌最慢的马与齐王最慢的马一样快,则有如下两种情况:{

㈠田忌最慢的马和齐王最快递马一样快,则战平;

㈡田忌最慢的马比齐王最快的马慢,则齐王胜;

}

Ⅲ若田忌最慢的马比齐王最慢的马慢,则田忌用最慢的马和齐王最快的马比,田忌次慢的马变最慢,齐王次快的变最快;

}

③若田忌最快的马比齐王最宽的马慢,则田忌用最慢的马和齐王最快的马比,田忌次慢的马变最慢,齐王次快的马变最快;

}

已Accpet的代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1001],b[1001],s[1001],v[1001];
int main(){
int n,i,j;
while(scanf("%d",&n),n){
memset(v,0,sizeof(v));
memset(s,0,sizeof(s));
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);
int q=0,k=0,t=n-1,f=n-1;
int total=0;
while(t>=q){
if(a[t]>b[f]){                    //①
t--;
f--;
total+=200;
}
else if(a[t]==b[f]){            //②
if(a[q]>b[k]){                        //Ⅰ
q++;
k++;
total+=200;
}
else if(a[q]==b[k]){                //Ⅱ
if(a[q]<b[f]){                            //㈠
f--;
q++;
total-=200;
}
else{                                    //㈡
f--;
q++;
}
}
else{        			    //Ⅲ
f--;
q++;
total-=200;
}
}
else{                            //③
f--;
q++;
total-=200;
}
}
printf("%d\n",total);
}
return 0;
}
这篇与之前的一篇重了,sorry,原因就不说了,都怪自己心太急;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: