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. Xshell配置公钥,免密码登陆

    下面讲解如何通过xshell配置使用PubKey 来登录服务器,可以减少通过password登录的麻烦. 1.先到用户的家目录, cd ~ 2.执行ssh-keygen -t dsa(or rsa) ...

  2. 小白学Python-S3-day04-用户信息的增删改查、变更权限

    一.用户信息 文件中每一行就是用户的详细信息,每一行是按照冒号为分隔符分成七段 第一段用户名,第二段密码占位符,第三段UID,第四段GID,第五段是描述信息,第六段是家目录.第七段是 是否 可以登录操 ...

  3. Java ArrayList源码分析(有助于理解数据结构)

    arraylist源码分析 1.数组介绍 数组是数据结构中很基本的结构,很多编程语言都内置数组,类似于数据结构中的线性表 在java中当创建数组时会在内存中划分出一块连续的内存,然后当有数据进入的时候 ...

  4. Java的异常:Error与Exception

    一. 异常机制的概述      异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 程序错误分 ...

  5. apk签名发布及其原理

    如果我们在ADT中开发完了一个android项目,如何将它打包呢?方法如下: 1.unsigned APP(无签名的APP) 最懒惰的方法,可以直接在项目的bin目录下直接将apk拷贝出来,就ok了. ...

  6. MySQL什么时候适合建索引,什么时候不适合建索引

    1.什么事索引(本质:数据结构) 索引是帮助MySQL高效获取数据的数据结构. 2.优势: 1.提高数据检索的效率,降低数据库IO成本 2.通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消 ...

  7. Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)

    Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享)  点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJK ...

  8. PTA A1011&A1012

    A1011 World Cup Betting (20 分) 题目内容 With the 2010 FIFA World Cup running, football fans the world ov ...

  9. Tcloud 云测平台-使用介绍

    Tcloud使用介绍 前端github地址:https://github.com/bigbaser/Tcloud后端github地址:https://github.com/bigbaser/Tclou ...

  10. 如何基于String实现锁?

    在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理.因为只有在相同字符串的情况下,并发操作才是不被允许的. 因为String 类型的变量赋值是 ...