您的位置:首页 > 其它

NYOJ 364 田忌赛马

2014-03-03 09:48 281 查看
题意:

田忌和齐王各有N匹马,判断怎样比赛,使田忌净胜场数最多。

我感觉这题的精髓就是,不管怎么比赛,都要让田忌的马发挥最大价值。

当然,马的第一要务是用来赢得比赛,而且要最大效益的赢,也就是要赢对方仅次于自己的马。

当他不能完成这个任务的时候就要去输,并拉对方最快的马下水,给自己后面的队友创造更大的胜利机会。

1.慢马可以赢就让它赢,赢不了就拉国王的快马下水

2.慢慢平手,绝对不要以为平手就可以了,因为如果后面的队友可以赢king的这马,自己输和平手结果一样,但是自己还可以拖一匹快马下水

3.还有就是不要乱防水 如果我方快马可以赢对面快马 就不必要牺牲了 不要浪费自己方快马的才华 平手不输硬币

(两个标记 一个头 一个尾 分3中情况考虑)

#include<stdio.h>
#include<algorithm>
using namespace std;
int t[1005],k[1005],win,lose;
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
scanf("%d",&t[i]);
for(int i=0;i<n;i++)
scanf("%d",&k[i]);
sort(t,t+n);
sort(k,k+n);
win=lose=0;
int t_slow=0,k_slow=0;
int t_quick=n-1,k_quick=n-1;
while(t_slow<=t_quick)
{
if(t[t_slow]>k[k_slow])   //t慢马可以赢king的情况            {
{
win++;
t_slow++;
k_slow++;
}
else if(t[t_slow]<k[k_slow])//慢马pk不应king 那么就让他输 并且拉king的快马下水
{
lose++;
t_slow++;
k_quick--;
}
else//和的情况
{
if(t[t_quick]>k[k_quick])//放水前的决断
{
win++;
t_quick--;
k_quick--;
}
else
{

if(t[t_slow]<k[k_quick])//不虚
lose++;
t_slow++;
k_quick--;
}
}
}
printf("%d\n",(win-lose)*200);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: