标签:贪心 hdu
2 5 1 7 2 10 9 6 11 62 63 54 66 65 61 57 56 50 53 48 0 0
Case 1: 2 Case 2: 4
题目意思:
有m个人,每个人有n张牌,牌点为在1~n*m中的不同的数。每回合每个人出一张牌,点数最大的那个人赢,给出A人初始时的n张牌的牌点,问A至少赢的次数。
思路: 看做两个人单挑,你有m张牌,我有m*(n-1)张牌,每次我都出比你大大一点的牌,如果没有,出最小的m张牌(可以忽略),不用担心什么的
上代码了:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 10005
int n,m;
int vis[N],a[N];
int main()
{
int i,ca=0;
while(~scanf("%d%d",&n,&m),n+m)
{
memset(vis,0,sizeof(vis));
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
vis[a[i]]=1; //我手上没有的牌
}
int ans=0;
sort(a,a+m); //排序对方的牌
int top;
for(i=m-1;i>=0;i--) //这里for(i=0;i<m;i++) 也是一样正确的,不必纠结
{
for(top=a[i];;top++)
if(!vis[top])
break;
if(top<=n*m)
vis[top]=1; //出掉这张牌
else
ans++; //没有比他大的,出最小牌(可以忽略出最小牌)
}
printf("Case %d: %d\n",++ca,ans);
}
return 0;
}
HDU 1338 Game Prediction 贪心,布布扣,bubuko.com
标签:贪心 hdu
原文地址:http://blog.csdn.net/u014737310/article/details/38662899