游戏预言"/>
洛谷p2649游戏预言
题目:John和朋友们在玩纸牌游戏,他们一共有m个人(包括John)。他们的纸牌比较特殊,一共有n*m张牌,牌号分别为1,2,…,n*m,没有牌号相同的牌。每个人先拿到n张牌,然后,每一轮,每个人出一张牌,谁最大则谁赢得这一轮。现在已知John手中的n张牌,计算他最少能赢得多少轮。
输入:第一行为两个整数m和n,2≤m≤20,1≤n≤50;第二行有n个正整数,表示John手中的n张牌的数值
输出:仅一个整数,表示John最少能赢的次数。
解题思路:因为是最少能赢多少局,所以是由大到小考虑。再根据john的手牌与没有的手牌相比较若有比该手牌大的则做标记,若无这是可以赢的,依次枚举。
案例:
输入#1:2 5
1 7 2 10 9
输出#1:2
输入#2:6 11
62 63 54 66 65 61 57 56 50 53 48
输出#2:4
代码如下:
#include<iostream>
using namespace std;
int main()
{int m,n,card[1001]={0},j[51]={0};cin >> m >> n;for(int i=0;i<n;i++){cin >> j[i];card[j[i]]=1;}int num=0,a=n*m;for(int i=a;i>0;i--){if(card[i]==1){int flag=0;//判断是否能赢for(int j=a;j>i&&flag==0;j--)if(card[j]==0)card[j]=1,flag=1;//枚举,看能否把我现在这张牌压制if(flag==0)num++;//不能,则答案+1}}cout << num << endl;return 0;
}
计算机204 倪
更多推荐
洛谷p2649游戏预言
发布评论