贪心
题意:有m个人玩牌,每个人有n张手牌,手牌点数最大为n*m,每场每个人拿除一张手牌,谁最大谁赢,现在给出你的手牌点数,问你一定能赢多少场。
思路:先将手牌从大到小排序,每次枚举一张牌,看比它大的手牌是否已经出现过,(你的手牌均为已经出现过),如果所有比它大的手牌已经出现过,那么这局出这张一定能赢。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int t=1;
int m,n;
int a[51],vis[51*21];
while(~scanf("%d%d",&m,&n),(n+m))
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);//记录每张牌的点数
vis[a[i]]=1;//你的手牌均为已经出现过
}
sort(a,a+n,cmp);
int ans=0;
int Max=n*m;//手牌的最大值
for(int i=0;i<n;i++)
{
int flag=1;
for(int j=Max;j>=a[i];j--)//枚举所有比这张牌大的牌,看看是否已经出现过
{
if(!vis[j])如果没有出现过,那么你这局别人出这张你就输了,但这张就变成已经出现过
{
flag=0;
vis[j]=1;
break;
}
}
if(flag) ans++;//如果都已经出现过那么你这局赢定了
}
printf("Case %d: %d\n",t,ans);
t++;
}
return 0;
}