Description

奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手。 不幸的是, 任何牧 群里的其他牛都不是好对手。
他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全可以被预测的模式。 然
而对于贝茜来说, 找到赢的方法仍然是一个挑战。
贝茜和他的朋友埃尔西最近在玩一个简单的卡牌游戏, 总共有 2N 张卡牌, 上面的数字
为 1−2N, 贝茜分得 N 张, 埃尔西分得 N 张。
他们玩 N 局游戏, 每局游戏双方都出一张牌。
最初, 数字大的得 1 分, 输了不得分。 但是, 贝茜可以在游戏的某个时刻改变游戏规则
( 有且仅有一次), 对于剩下的游戏, 数字小的得 1 分, 输了不得分。 贝茜可以不做出这个
选择, 整局都是“ 高分卡片赢”, 或者一开始就改变规则“低分卡片赢”。
给出贝茜预测的埃尔西将要使用的 N 张卡片, 求出贝茜的得分最大值。

Input

第一行一个整数 n
接下来 n 行每行一个整数 x, 表示埃尔西拥有的卡片数字很简单就能推测出贝茜拥有的
卡片。

Output

只有一行一个整数 max,为得分最大值。

Sample Input

4
1
8
4
3

Sample Output

3

Hint

【 数据范围】
对于 10%的数据, n<=100
对于 30%的数据, n<=2000
对于 100%的数据,n<=50000

贪心题:

  可以考虑我们假如先不考虑有一次改变的机会每次要比对手出的大,那么就是跑一次田忌赛马(对手的出牌顺序是一定的,而我们可以随便出牌),然后输出答案就可吧。也就是说,对于我们最大的牌,我们必须去用我们最大的牌去尽量大对方的比我们这张拍小一点的牌,然后如果这张牌没有办法打过,那么我们必须要用我们最弱的拍去打敌方最大的牌。

  然后我们考虑可以改变规则的情况,显然我们可以把大的获胜,对于每个敌人每个位置的答案记录下来,然后我们再反过来做一田忌赛马(牌小的胜利),因为去参加第一次赛马的马一定是这个序列里的前k个,而第二次的马一定是后边的马,所以马不可能重复被选。因此我们枚举断点,将两场比赛结果相加的最大值就是答案。

  实现的话可以用set,或者自己用数组,二分也可以。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <set>
#define MAXN 50100
using namespace std;
set<int> first,second;
set<int> :: iterator f,s;
int a[MAXN],b[MAXN],cnt[MAXN];
int n,m,num=;
bool have[MAXN*];
int main()
{
scanf("%d",&n);m=n*;
for(int i=;i<=n;i++){
int x;scanf("%d",&x);
b[i]=x,have[x]=;
}
for(int i=;i<=m;i++){
if(have[i]) continue;
a[++num]=i;
first.insert(i);
second.insert(i);
}
for(int i=n;i>=;i--){
cnt[i]=cnt[i+];
f=first.lower_bound(b[i]);
if(f!=first.begin()) cnt[i]++,first.erase(--f);
else first.erase(--first.end());
}
int ans=cnt[],hh=;
for(int i=;i<=n;i++){
s=second.lower_bound(b[i]);
if(s!=second.end()) hh++,second.erase(s);
ans=max(ans,cnt[i+]+hh);
}
printf("%d",ans);
return ;
}

BZOJ 4392 卡牌游戏的更多相关文章

  1. bzoj千题计划202:bzoj3191: [JLOI2013]卡牌游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=3191 每个人获胜的概率只与其在排列中与庄家的相对位置有关 dp[i][j] 还剩i个人时,从庄家数第 ...

  2. BZOJ 4205: 卡牌配对

    4205: 卡牌配对 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 173  Solved: 76[Submit][Status][Discuss] ...

  3. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  4. BZOJ_3191_[JLOI2013]卡牌游戏_概率DP

    BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...

  5. 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告

    P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ...

  6. 【BZOJ3191】【JLOI2013】卡牌游戏 [DP]

    卡牌游戏 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description   N个人坐成一圈玩游戏.一开始我 ...

  7. TCG卡牌游戏研究:《炉石战记:魔兽英雄传》所做的改变

    转自:http://www.gameres.com/665306.html TCG演进史 说到卡牌游戏,大家会联想到什么呢? 是历史悠久的扑克牌.风靡全球的<MTG 魔法风云会>与< ...

  8. [JLOI2013]卡牌游戏 概率DP

    [JLOI2013]卡牌游戏 概率DP 题面 \(dfs\)复杂度爆炸,考虑DP.发现决策时,我们只用关心当前玩家是从庄家数第几个玩家与当前抽到的牌是啥.于是设计状态\(f[i][j]\)表示有\(i ...

  9. [省选联考 2021 A/B 卷] 卡牌游戏

    垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...

随机推荐

  1. 【Offer】[54] 【二叉搜索树的第k小节点】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 给定一棵二叉搜索树,请找出其中第k小的节点.例如,在下图的二叉搜索树里,按节点数值大小顺序,第三小节点的值是4.  牛客网刷题地址 思 ...

  2. Scrapy框架的下载与安装

    一.下载scrapy 首先,如果安装了anaconda, 可以直接在terminal窗口中输入: conda install scrapy 在图示符中,输入y, 表示继续处理信息 二.验证 是否安装成 ...

  3. springcloud(六):Spring Cloud 配置中心采用数据库存储配置内容

    Spring Cloud 配置中心采用数据库存储配置内容 转自:Spring Cloud Config采用数据库存储配置内容[Edgware+] Spring Cloud Server配置中心采用了G ...

  4. 初始mqtt服务

    MQTT入门 概念 mqtt意为消息队列遥测传输,是IBM开发的一个即时通讯协议.由于其维护一个长连接以轻量级低消耗著称,所以常用于移动端消息推送服务开发. 协议格式 mqtt协议控制报文的格式包含三 ...

  5. 前端利器躬行记(5)——Git

    Git是一款开源的分布式版本控制系统,它的出现和Linux紧密相关.Linux内核项目组为了能更好地管理和维护Linux内核开发,于2002年开始启用商业的分布式版本控制系统BitKeeper.虽然软 ...

  6. Windows10 系统更新之后找不到输入法

    是因为 , 系统更新之后 , 系统自带的输入法没有更新好 , 过个一两天,系统会自动修复. 简单解决办法是 , Ctrl+Alt+delete 打开任务管理器, 在进程中,按CPU大小排序,找到输入法 ...

  7. vue 页面跳转传参

    页面之间的跳转传参,正常前端js里写 window.location.href="xxxxx?id=1" 就可以了: 但是vue不一样 需要操作的是路由history,需要用到 V ...

  8. FreeSql (八)插入数据时指定列

    插入数据时指定列,和忽略列对应,未被指定的列将被忽略. var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Passwor ...

  9. django配置静态文件的两种方法

    方法一:按照django配置静态文件的方法,可以在APP应用目录下创建一个static的文件夹,然后在static文件夹下创建一个和APP同名的文件夹,如我有一个blog的django项目,在下面有一 ...

  10. 19 (OC)* RunLoop

    面试题 1:讲讲RunLoop,项目中有用到吗? 2:RunLoop内部实现逻辑? 3:Runloop和线程的关系? 4:timer 与 Runloop 的关系? 5:程序中添加每3秒响应一次的NST ...