这个我上来把题目理解错了,我以为所有人的牌都是一样的,感觉这个题太麻烦了吧,而且题目样例过不去啊……后来发现理解错了,给出的数据是他一个人的数据,就是让我们求他一定能赢的轮数,所有的牌是固定的(1 - n×m),然后就去找当前最大值就可以了,不断的更新被打出的牌,就可以求出答案了。
代码如下:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int data[50]; bool cmp(int a,int b) { return a>b; } int main() { int n,m,cas=0; while(~scanf("%d%d",&m,&n),m) { for (int i=1;i<=n;i++) { scanf("%d",&data[i]); } sort(data+1,data+1+n,cmp); int ll=0,cnt=0; for (int maxn=m*n,i=1;i<=n,maxn>=1;maxn--) { if (maxn==data[i]) { i++; if (ll==0) { cnt++; } else { ll--; } } else ll++; } printf("Case %d: %d ",++cas,cnt); } return 0; }