POJ P1323 Question Report
Game Prediction
时间限制:1000ms 内存限制:10000k
百度翻译(说什么好呢…) = =
描述
假设有米的人,包括你,打一个特殊的卡牌游戏。在开始时,每个玩家得到N卡。一个卡点是一个正整数,最多N * M.没有两张同点。在一轮比赛中,每个玩家选择一张卡片和别人比较。该卡最大的PIP胜的比赛的球员,然后开始下一轮。经过N轮,当每个球员所有的卡被选中的球员赢得了大多数回合是比赛的获胜者。给你的卡收到开头,写一个程序来告诉轮最大数,你至少可以赢得整个比赛期间。
输入
输入包含多个测试案例。每个用例的第一行包含两个整数M和N,代表玩家和牌数量每名玩家在游戏开始时的数量,分别。这是在一个正整数n,表示你在开始接收卡点。然后是一个空行分隔情况如下。输入是由两个零。
输出
对于每一个测试案例,输出一行,包含测试用例的数量之后,至少你会赢得比赛期间数。
样本输入
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
代码
//POJ1323 pjQ2
//贪心
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int sum=1;
int a[255];
int main(){
while(sum){
int n,m;
int win=0,lose=0;
scanf("%d%d",&n,&m);
if(n==0 && m==0){ //结束判断
break;
}
for(int i=1;i<=m;i++){ //输入m张牌
scanf("%d",&a[i]);
}
sort(a+1,a+1+m); //排序 从小到大
for(int i=m*n;i>=1;i--){ // 从后往前(从大到小 m*n-->1)
if(a[m]!=i){ //所有牌中最大的与 其他人对比
lose++; //不等则输
}else{
if(lose){ //否则 赢输'合一'
lose--;
}else{ //再否则胜利
win++;
}
m--; //如果输了不变
if(m<0){ //所有的牌判断完了 跳出循环
break;
}
}
}
printf("Case %d: %d\n",sum,win);//输出
sum++;
}
return 0;
}