其实这道题我也是看了题解之后才会的。这个题的大体意思就是:有M个人玩卡片游戏,每个人手里有N张卡片,同样你也有N张卡片,每个卡片对应一个数字,所有卡片上的数字范围是1~N*M,问你最多能赢几次。
#include <iostream>
#include <string.h>
using namespace std;
bool a[1050];
int main()
{
int m,n,cc=0,i,x;
while(scanf("%d %d",&m,&n)!=EOF)
{
if(m==0&&n==0)
break;
memset(a,0,sizeof(a)); //每一次都要对数组清零;
cc++;
for(i=0;i<n;i++)
{
scanf("%d",&x);
a[x]=1; //记录下你手中卡片上的数字
}
int max=0,win=0;
for(i=m*n;i>0;i--) //从最大的数往小的一个个枚举
{
if(a[i])
{
win++;
if(win>max)
max=win;
}
else
win--;
}
printf("Case %d: %d\n",cc,max);
}
return 0;
}