hdu 1052 Tian Ji -- The Horse Racing

Tian Ji – The Horse Racing

分析

一、当田忌有必赢的马,则消耗国王最优的马;
二、当田忌有必输的马,则消耗国王最优的马;
三、当国王有必输的马,则田忌用最慢马赢(代价最小);
四、当国王有必赢的马,则田忌用最慢马输(保留最大实力);
五、当双方都无必输、必赢的马时,即最快与最快、最慢与最慢都一致时,田忌用最慢马消耗国王最快马是最优的策略。证明:
1、若存在国王的马赢田忌的马,则田忌应用最慢的马;而且这最慢马输时,应消耗国王的最快马;
在这里插入图片描述

2、若不存在国王的马赢田忌的马,即田忌的马要么赢、要么平,则:
1)田忌的马速度都相同,策略显然成立;
2)田忌的马至少存在两种速度,虽然多输了一场,但至少也能多赢一场,故题设策略是最优的。
在这里插入图片描述

代码

#include <bits/stdc++.h>
using namespace std;
#define MXN 1010
int n, t[MXN], k[MXN];
int main(){
    while(scanf("%d", &n)){
        if(n == 0) break;
        for(int i = 1; i <= n; i++) scanf("%d", t+i);
        for(int i = 1; i <= n; i++) scanf("%d", k+i);
        sort(t+1, t+n+1, [](int x, int y){ return x > y; });
        sort(k+1, k+n+1, [](int x, int y){ return x > y; });
        int th = 1, tt = n, kh = 1, kt = n;
        int w = 0, d = 0, l = 0;
        while(w + d + l < n){
            if(t[tt] < k[kt]) kh++, tt--, l++; // 若田的慢马必输时
            else if(t[th] > k[kh]) kh++, th++, w++; // 若田的快马必赢时
            else if(t[th] < k[kh]) kh++, tt--, l++; // 若王的快马必赢时
            else if(t[tt] > k[kt]) tt--, kt--, w++; // 若王的慢马必输时
            else{ // 双方都无必输或必赢的马时
                if(k[kh] > t[tt]) l++;
                else if(k[kh] < t[tt]) w++;
                else d++;
                kh++, tt--;
            }
        }
        printf("%d\n", (w-l)*200);
    }
    return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jpphy0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值