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. 深入理解 ThreadLocal

    前言 上篇文章 深入理解 Handler 消息机制 中提到了获取线程的 Looper 是通过 ThreadLocal 来实现的: public static @Nullable Looper myLo ...

  2. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  3. 003 Python基本语法元素

    目录 一.概要 1.1 方法论 1.2 实践能力 一.概要 程序设计基本方法:https://www.cnblogs.com/nickchen121/p/11164043.html Python开发环 ...

  4. spring接口文档注解:@ApiOperation(转)

    spring接口文档注解:@ApiOperation @ApiOperation不是spring自带的注解是swagger里的 com.wordnik.swagger.annotations.ApiO ...

  5. android 多行 RadioButton的使用

    最近项目用到了多行RadioButton,随记录下. 先给出RadioButton的布局 <com.kuibu.jucai.widget.MyRadioGroup android:id=&quo ...

  6. 时钟AnalogClock和DigitalClock

    <AnalogClock android:layout_width="fill_parent" android:layout_height="fill_parent ...

  7. CAS ABA问题

    java.util.concurrent包的最底层基础CAS技术,原理很简单. CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什 ...

  8. Winform中使用DevExpress时给控件添加子控件的方法

    场景 在WInform中使用DevExpress时经常使用PanelControl控件用来进行布局设计,因此需要在代码中生成控件并添加子控件. 实现 一种是设置要添加的自控件的Parent属性为容器控 ...

  9. 如何编写出高质量的 equals 和 hashcode 方法?

    什么是 equals 和 hashcode 方法? 这要从 Object 类开始说起,我们知道 Object 类是 Java 的超类,每个类都直接或者间接的继承了 Object 类,在 Object ...

  10. 生产环境轻量级dns服务器dnsmasq搭建文档

    dnsmasq搭建文档 一.生产环境域名解析问题 之前生产环境设备较少,是通过维护master(192.168.1.1)设备的hosts文件实现的.每次新增设备后,需要在master的hosts文件中 ...