题意:n个人在玩牌,每个人有m张牌,于是就有n*m张牌(每张牌都有一个值,介于1到n*m之间,不重复),然后进行m轮游戏,每轮每个人都出一张牌,牌最大的那个人就赢了,然后给出n和m,以及你的m张牌,问你最多能赢几轮?
题解:从n*m开始递减到1,检查每张牌,如果该牌自己是否有,如果没有,则++n1(表示能赢自己其余牌的牌数),如果有,判断n1是否为0,如果是,那么能赢的局数就加一,不然的话就--n1,最后输出ans就行
#include<iostream>
#include<algorithm>
using namespace std;
int rec[1010];
int main()
{
int n,m,Case=0;
int i,n1,n2,ans;
while(scanf("%d %d",&n,&m),n||m)
{
ans=0;
n1=n2=0;
Case++;
for(i=1;i<=m;i++)
scanf("%d",&rec[i]);
sort(rec+1,rec+1+m);
for(i=n*m;i>=1,m>0;i--)
{
if(rec[m]!=i)
n1++;
else
{
if(n1)
n1--;
else
ans++;
m--;
}
}
printf("Case %d: %d\n",Case,ans);
}
return 0;
}