poj1323
简而言之就是一个人手中有num张牌,然后拿出一张,再看看剩下的牌中有没有比它大的,有的话就ans+1,也就是输了一局;
AC代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 1005 int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b; } int p1[N],p2[N]; bool vis[N]; int num,sum,ans; int peo;//people int main(){ int i,j,k,count=1; while(scanf("%d%d",&peo,&num)==2,peo|num){ sum=peo*num; memset(vis,false,sizeof(vis)); for(i=0;i<num;i++){ scanf("%d",&p1[i]); vis[p1[i]]=true; } for(i=sum,k=0;i>=1;i--){ if(k==num)break; if(vis[i]==false) p2[k++]=i; }//取出剩下的最大的sum张牌,由大到小排列 qsort(p1,num,sizeof(p1[0]),cmp);//由小到大排列 /*qsort(p2,num,sizeof(p2[0]),cmp);//由小到大 ans=0;//num-ans i=0; for(k=0;k<num;k++){ if(p2[k]>p1[i]){ ans++; i++; continue; } }*/ ans=0; i=0; for(k=num-1;k>=0;k--) { if(p2[k]>p1[i]){ ans++; i++; continue; } } printf("Case %d: ",count++); printf("%d\n",num-ans); } return 0; }
keep moving...