标签:
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