这个题是用枚举+贪心的思路:
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; }
老婆生病了,我不能照顾她,我很是伤心,无奈……