这个题是用枚举+贪心的思路:
1、把自己的牌从大到小进行排序,存储到a数组里,然后把不是自己的牌,也从大到小,进行排序,存储到b数组里。
2、对自己的牌从大到小进行枚举,若当前的牌大于b中最大的牌,则这张牌是必赢的。若当前的牌小于b最大的牌,则这张牌不是一定赢的,然后枚举a中下一个元素,和b的下一个元素进行比较,循环下去……
源代码:
#include "stdio.h"
#include "string.h"
#include <algorithm>
using namespace std;
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
int m,n,i,j,k;
int a[1000],b[1000];
int count,num;
num=0; //存储进行了多少次试验
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&m,&n))
{
if(m==0)
break;
count=0; j=0; k=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);//对a数组中元素进行降序排序
for(i=m*n;i>0;i--)
{//把不是a中元素的牌,按降序存储到b中
if(i>a[j])
b[k++]=i;
else
j++;
}
k=0;
for(i=0;i<n;i++)
{
j=k;
if(a[i]>b[j])//最大元素进行比较
count++;
else
k++;
}
num++;
printf("Case %d: %d/n",num,count);
}
return 0;
}
老婆生病了,我不能照顾她,我很是伤心,无奈……