P2649 游戏预言

编程入门 行业动态 更新时间:2024-10-23 09:38:56

P2649 <a href=https://www.elefans.com/category/jswz/34/1770081.html style=游戏预言"/>

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最少能赢的次数。

 

输入输出样例

输入样例#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

 

 

绿色系列五:

 

又是一道思路好题。

 

john赢得最少的数量就是他的牌没人比他大的情况;

因为其他人如果要尽量减少john的赢的数量,那他一定要能压john就尽量压。

 

快排john的牌,然后从大到小出牌。

从m*n 开始从大到小枚举;

如果john的牌与枚举数相等,他就赢了,赢的数量+1;

反之 因为这张牌不在他手上,所以这张牌会用来压他的牌,

因为求的是赢的最少局数,所以赢的数量-1(好好理解);

 

然后可以调试一下看看第一个样例的代码实现过程就应该可以理解数量为什么要减一。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int n,m;
 9 int a[52],sum,ans;
10 
11 int main()
12 {
13     scanf("%d%d",&m,&n);
14     for(int i=1;i<=n;++i)
15         scanf("%d",&a[i]);
16     sort(a+1,a+n+1);
17     for(int i=n,j=n*m;i>0;--i,--j)
18     {
19         if(a[i]==j)        
20             sum++;        
21         else 
22         {
23             sum--;
24             i++;
25         }
26         ans=max(ans,sum);
27     }
28     printf("%d",ans);
29     return 0;
30 }

 


转载于:.html

更多推荐

P2649 游戏预言

本文发布于:2024-02-06 03:47:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746354.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:游戏

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!