标签:
3 92 83 71 95 87 74 2 20 20 20 20 2 20 19 22 18
200 0 0
题目大意:给田忌n匹马,给国王n匹马,输一轮减少200块钱,赢一轮增加200块钱,平局不奖惩。问最后最多能得到多少钱。
解题思路:如果田忌的慢马能赢国王的,就赢。如果比国王的慢,就拉国王的最快的马比,反正输,不如输的更有价值,为后边的马减小阻力。如果慢马一样快,首先看田忌的最快的马是不是比国王最快的马快,如果是就先让最快的马赢一局。如果不是,就让田忌的最慢的马跟国王的最快的马比较是不是相等,如果不是,那么就输一局;如果是,就让田忌最慢的马跟国王最快的马平局。
#include<bits/stdc++.h>
using namespace std;
int tj[1100],king[1100];
int main(){
int t,i,j,k,tmp,sum,cnt,n,m,tslow,tfast,kslow,kfast;
while(scanf("%d",&n)!=EOF){
memset(tj,0,sizeof(tj));
memset(king,0,sizeof(king));
for(i=0;i<n;i++){
scanf("%d",&tj[i]);
}
for(i=0;i<n;i++){
scanf("%d",&king[i]);
}
sort(tj,tj+n);
sort(king,king+n);
tslow=kslow=0;
tfast=kfast=n-1;
m=k=0;
while(m<n){
if(tj[tslow]>king[kslow]){ //田忌慢马比国王慢马快
tslow++;
kslow++;
k++;
}else if(tj[tslow]<king[kslow]){//田忌慢马比国王慢马慢
tslow++;
kfast--;
k--;
}else{//两人慢马同速
if(tj[tfast]>king[kfast]){//田忌快马比国王快马快
tfast--;
kfast--;
k++;
}else {//田忌快马慢于或等于国王快马
if(tj[tslow]<king[kfast]){//田忌慢马比国王快马慢
kfast--;
tslow++;
k--;
}else if(tj[tslow]==king[kfast]){//田忌慢马等于国王快马
tslow++;
kfast--;
}
}
}
m++;
}
cout<<k*200<<endl;
}
return 0;
}
/*
5
8 6 5 1 3
9 7 6 4 2
*/
标签:
原文地址:http://www.cnblogs.com/chengsheng/p/4630883.html