标签:
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10475 Accepted: 5046
Description
Input
Output
Sample Input
2 5
1 7 2 10 9
6 11
62 63 54 66 65 61 57 56 50 53 48
0 0
Sample Output
Case 1: 2
Case 2: 4
一、题目大意
有M个人,一人N张牌,每轮牌面最大的人赢(牌面只可能是1~M*N中的一个数且不重复),给出一个人的牌,求其至少能够赢的局数。
二、解题思路
这个题目的思路比较简单,由于人数和牌数比较少,所以直接暴力解,以第一个样例进行分析,用一个bool类型的数组。标记我手上有的牌为true,表格如下:
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
? | ? | ● | ? | ● | ● | ● | ● | ? | ? |
?本人 ● 对手
显然当本人为7时,对手可能有牌面为8可以赢过我,以此类推,所以可以用一个int类型记录对手目前拥有的比本人最大的牌还要大的牌的数目,当遇到我拥有的大牌的时候就消耗一张大牌,假如此时对手没有比本人还要大的牌,那么这一轮本人绝对胜利。
三、具体代码
1 #include <cstdio>
2 #include <cstring>
3
4 int main(){
5 int m, n, i, j, tmp, count=1;
6 bool cards[1050];
7 while(scanf("%d%d", &m, &n) && m && n){
8 memset(cards, false, sizeof(cards));
9 for(i=0; i<n; i++){
10 scanf("%d", &j);
11 cards[j] = true;
12 }
13 int large_cards=0, ans=0;
14 for(i=m*n; i>0; i--){
15 if(!cards[i]) large_cards++;
16 else{
17 if(large_cards == 0) ans++;
18 else large_cards--;
19 }
20 }
21
22 printf("Case %d: %d\n", count, ans);
23 count++;
24 }
25
26 return 0;
27 }
POJ1323 Game Prediction(贪心算法训练)
标签:
原文地址:http://www.cnblogs.com/jinglecjy/p/5671912.html