Problem C

简单题意

田忌赛马,给出田忌和国王马的速度,每场输者要给赢者200钱,求出田忌最多能赢得的钱数

解题思路形成过程

一开始想了用田忌的最快的马尽可能赢国王尽可能快的马,交了好几次都是WR,无奈看样子是自己的方法选错了,看看网上大神怎么说,比赛方法是,用田忌最强的马对抗国王最强的马,不行则用最弱的马,对抗国王最弱的马,在不行,拿一只田忌的马应付掉国王最强的马,看完解说想起了,原来小学学的原故事就是这样比的。

感想

做完题忘了写总结,明明记得自己写了啊,也许把注释当成写了总结了吧(笑cry)。

AC代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
bool cmp(int &a, int &b)
{
    return a<b;
}
int main(){
    ifstream cin("in.txt");
    int n;
    while(cin>>n&&n){
        int win=0,lose=0;
        int t[1001],k[1001];
        for(int i=0;i<n;i++)
            cin>>t[i];
        for(int i=0;i<n;i++)
            cin>>k[i];
        sort(t,t+n,cmp);
        sort(k,k+n,cmp);
        int t_min=0,t_max=n-1;
        int k_min=0,k_max=n-1;
        while(t_min<=t_max){
            if(t[t_max]>k[k_max]){//×îÇ¿µÄÂí
                win++;
                t_max--;
                k_max--;
            }else if(t[t_min]>k[k_min]){//×îÈõµÄÂí
                t_min++;
                k_min++;
                win++;
            }else {//Ìï¼É×îÈõµÄÂí£¬¶Ô¿¹¹úÍõ×îÇ¿µÄÂí
                if(t[t_min]<k[k_max])
                lose--;
                t_min++;
                k_max--;
            }    
        }    
    cout<<(win+lose)*200<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值