【GDKOI训练】纸牌游戏(card)

题目描述

 Bessie 是一头非常喜欢纸牌的奶牛,虽然她没有大拇指,但她对纸牌有近乎痴迷的喜   爱。不幸的是,牛群中的其他牛都不是好的对手。他们的水平真的很差。他们总是以一种完全可预测的方式来玩纸牌!尽管如此,Bessie 仍然可以选择如何获胜。
Bessie 和她的朋友Elsie 在玩一个简单的纸牌游戏,她们拿了一付有2n 张卡片的牌,牌
上的数字编号为1- 2n ,并将其均分成两份,一份卡片给Bessie 和一份卡片给Elsie。
然后两人开始玩牌,一共进行n 轮, 在每一轮中,Bessie 和Elsie 都打一张卡,谁的牌
大就得一分。
神奇的Bessie 可以预测Elsie 打牌顺序,并且尽可能的想赢取胜利。请确定Bessie可以
赢得的最大点数。

输入

第一行一个整数N (1≤N≤50,000).
接下来的N 行是Elsie 将每轮连续的比赛中出的牌。请注意,从这些信息很容易确定
Bessie 的卡片。

输出

 一行给出Bessie 可以得分的最大点数。

样例输入

3
1
6
4

样例输出

2

数据范围限制

提示

​贝西手上的牌是2,3,5,她按照2,3,5 的顺序出牌可以获得2 分。

题目思路:这道题想必大家都会第一时间想到田忌赛马。对这道题就是
它的一个改版。

我们先将贝西和埃尔西的牌做一遍升序排序。

我们对于​贝西的每一张牌都有两个情况:

  1. 如果贝西的牌大于埃尔西的牌,我们则将得分加一,这个其实没有什么好讲的,因为我们已近排好了序,所以如果当前的结果一定是最优的。
  2. 如果贝西的牌小于埃尔西的牌,那我们就用贝西的下一张牌进行比较。

具体实现:
对于我们怎么去取贝西的牌,其实很简单,那就是用一个bool数组将埃尔西的牌标记为1,然后for一遍,没有表示的就是贝西的牌了!

注意一点:这里我们的bool数组要开到2*50000,也就是100000,因为我们for是从一到2n,然后去取牌,所以要定大点,否则就错了!!

code:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[50010],b[50010];
bool f[100010];
int main()
{freopen("card.in","r",stdin);freopen("card.out","w",stdout);int n,t=0,ans=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);f[a[i]]=1;}for(int i=1;i<=2*n;i++) if(!f[i]) b[++t]=i;sort(a+1,a+1+n);sort(b+1,b+1+n);int t1=n,h1=1;    for(int i=1;i<=n&&h1<=t1;i++){if(b[i]>a[h1]) ans++,h1++;else t1--;}cout<<ans<<endl;return 0;
}

我的程序其实做了很多的多余操作,其实可以不用的,这里跟大家提一下:

  • 贝尔西的牌其实不用排序,因为,总所周知,桶排序是已近将数排好了序,所以不用了。
  • 大家看我的程序,其实我还定了一个埃尔西的尾指针,后来在改题是发现,其实是不用的我们只用循环1~n(贝尔西的牌)就行了,因为我们只需要用这几个牌去作比较,到了n那他下面就不用循环了,所以可以不用考虑尾指针的问题
#include<iostream>
#include<cstdio>
using namespace std;
int a[100001],b,c,d;
int main()
{freopen("card.in","r",stdin);freopen("card.out","w",stdout);cin>>b;for(int i=1;i<=b;i++){cin>>c;a[c]=1;}c=0;for(int i=b*2;i;i--){if(!a[i])c++;else if(c)d++,c--;}cout<<d;
}

【GDKOI训练】纸牌游戏(card)相关推荐

  1. phaser.min.js_如何使用Phaser 3,Express和Socket.IO构建多人纸牌游戏

    phaser.min.js I'm a tabletop game developer, and am continually looking for ways to digitize game ex ...

  2. 用计算机玩纸牌,《玩“纸牌”游戏》教学设计

    [教学目标] 知识目标:1.进一步认识窗口.对话框和菜单命令. 2.让学生掌握纸牌游戏的玩法,使学生从玩中学计算机知识. 3.使学生熟练掌握鼠标器的操作方法. 4.初步使用"帮助" ...

  3. unity多人游戏_如何使用Unity 2D和镜像构建多人纸牌游戏(更新)

    unity多人游戏 Working with the canvas in Unity 2D can feel complicated at first, particularly if you're ...

  4. 用python实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)

    1.namedtuple:命名元组,可以创建一个没有方法只有属性的类 from collections import namedtuple card = namedtuple('card',['ran ...

  5. 纸牌游戏洗牌发牌排序算法设计

    纸牌游戏洗牌发牌排序算法设计 本文提供纸牌游戏设计制作的基础部分,即洗牌,发牌,牌张排序排列显示的算法. 以及游戏开始时间使用时间的显示.我是用简单的C语言编译器MySpringC在安卓手机上编写的. ...

  6. 面向对象实验——solitaire纸牌游戏

    项目地址 https://github.com/ccclll777/Windows_Solitaire_game 如果有帮助可以点个star 实验内容 使用java/C++语言,利用面向对象技术,模拟 ...

  7. java课程设计纸牌游戏_java练习项目之纸牌游戏实例源码

    java应用练习项目之纸牌游戏实例源码.java纸牌项目练习题目要求: 定义纸牌的花色 定义纸牌的大小2A 花色与数字组成一张牌 组成一整副纸牌 构造玩家 发牌 题目 : 创建一副扑克牌,这副牌是标准 ...

  8. 纸牌游戏炸金花设计制作(C语言)

    纸牌游戏炸金花设计制作 (C语言) 我是编程爱好者.早期使用windows时就被扫雷游戏,钻石棋游戏,红心大战游戏迷住.相信大家也都玩过吧.在学习VB6编程时就编制过钻石棋和红心大战那样的游戏.都是标 ...

  9. 纸牌游戏梭哈设计制作(C语言)

    纸牌游戏梭哈设计制作 (C语言) 我是编程爱好者.早期使用windows时就被扫雷游戏,钻石棋游戏,红心大战游戏迷住.相信大家也都玩过吧.在学习VB6编程时就编制过钻石棋和红心大战那样的纸牌游戏.都是 ...

最新文章

  1. ajax csv写文件内容,接收.csv文件作为ajax成功函数中的数据
  2. OpenCV中使用SVM简介
  3. QT中添加背景图片,颜色,以及字体等
  4. opengl加载显示3D模型ZAE类型文件
  5. JSONObjec的作用详解——Web网络系列学习笔记
  6. android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
  7. 更新丨.NET 7 预览版2 中的 ASP.NET Core
  8. spark在服务器运行示例_创建示例HTTPS服务器以获取乐趣和收益
  9. Python——PrettyTable
  10. sas 文件传输 本地 服务器,SLIM SAS SFF-8654服务器转换线让传输更容易!
  11. 【应用安全技术】浅谈安卓开发代码混淆技术
  12. 2021年Java后端开发学习路线(建议收藏!)
  13. 斗鱼自动刷屏脚本-javaScript斗鱼刷屏脚本-js刷屏脚本
  14. 微信小程序怎么获取到data数据?
  15. 预测科技未来发展趋势的10个定律
  16. 今天给大家分享下收集的一些文案:日常文案系列合集,收藏备用
  17. 2018年存储设备趋势:NAS 朝企业级产品发展,SSD 界面复杂化
  18. 专业系统开发流程有多少步骤?如何进行系统开发?
  19. 假冒上市被揭发,这家公司有何来头?
  20. SpringBoot实现Java高并发秒杀系统之Service层开发(二)

热门文章

  1. Ubuntu下安装Microsoft Teams
  2. Emag eht htiw Em Pleh POJ - 2993
  3. Kotlin之SharedFlow和Stateflow
  4. python代码运行助手是什么业务_Python代码运行助手
  5. 寻找苹果(Mac OS)分区的数据恢复软件经历
  6. 开亚软件分析企业外贸客户管理关系问题
  7. 学习日记day28 平面设计 构图
  8. 虚拟机如何设置外网ip
  9. 给ubuntu中谷歌配置host
  10. 前端基础--主流浏览器及其内核