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;

}

  

你可能感兴趣的:(poj)