题意:一群人打牌包括你,每人出一张牌,谁最大,谁就算赢一局,问你最少能赢几局?
给出人数N,每人的牌数M,及你的牌。
分析:1.这题需比较大小,就像我们打牌时要将牌排序以便出牌,显然要先将手上的牌进行排序;
2.如果我们抓到了最大的牌a[i-1]==m*n=count,显然我们必胜一局,但与此同时所有的牌已有一张最大的作废i--,count--,且我们手上的牌最大的变成了原来次大的a[i-2];
3.如果我们最大的牌小于其他人手中的牌,那么我们输一局,且与此同时我们手上这张最大的牌和比它大的那张牌作废(为了保证够大的牌不浪费我们赢得最少,其他人只需出一张大于我们的牌即可),此时i--且count=count-2;
#include<iostream> #include<algorithm> using namespace std; int main(){ int num=0,n,m,a[10001],sum; while(cin>>n>>m,m!=0||n!=0){ int count=m*n; sum=0; for(int i=0;i<m;i++) cin>>a[i]; sort(a,a+m); for(int i=m-1;i>=0;i--){ if(a[i]<count){ count-=2; } else if(a[i]==count){ sum++; count--; } } cout<<"Case "<<++num<<": "<<sum<<endl; } return 0; }