6 11
62 63 54 66 65 61 57 56 50 53 48
分析一下容易知道,66和65必定能赢,而61,62和63之中必定有两张能赢(能赢他们的只有64,且只有一张),于是大致想法就出来了,从n*m开始递减到1,检查每张牌,如果该牌自己是否有,如果没有,则++n1(表示能赢自己其余牌的牌数),如果有,判断n1是否为0,如果是,那么能赢的局数就加一,不然的话就--n1,最后输出ans就行
#include "stdio.h"
#include "string.h"
int main()
{
int m,n,i,j,k,t,cnt;
int a[1002];
int w=0;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m==0&&n==0)
break;
w++;
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
scanf("%d",&k);
a[k]=1;
}
cnt=0;
for(i=n*m,j=0,t=0;j<n;i--)
{
if(a[i])
{
if(t)
{
t--;
j++;
}
else
{
cnt++;
j++;
}
}
else
t++;
}
printf("Case %d: %d\n",w,cnt);
}
return 0;
}
// 这个题目的思路就是比较数的大小,可以用一个数组的下标来实现,从小到大的数
// 如果出现了 数组的那个值就设为 1 然后比较。
// 从最大的数 n*m 开始一直往下