简单题意
田忌赛马,给出田忌和国王马的速度,每场输者要给赢者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;
}