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】[43] 【1~n整数中1出现的次数】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数.例如,输入12, 1~12这些整数中包含1的数字有1.10.11和12,1 ...

  2. Android-打包AAR步骤以及最为关键的注意事项!

    ### 简介 最近因为项目的要求,需要把开发的模块打包成aar,供其他项目调用,在搞了一段时间后,发现这里还是有很多需要注意的地方,所以记录一下,帮助大家不要走弯路. **首先何为aar包?** ![ ...

  3. 通过网上的webservice自己编写两个客户端

    1.根据电话号码查询归属地等信息 根据http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl采用jdk生成所需的代码,编写一个contro ...

  4. MySQL中几个重要的文件

    一.数据库层面 错误日志文件(error log) 二进制日志文件(binary log) 慢查询日志(slow log) 全量日志(general log):general log 会记录MySQL ...

  5. Hbase 统计表行数的3种方式总结

    有些时候需要我们去统计某一个Hbase表的行数,由于hbase本身不支持SQL语言,只能通过其他方式实现.可以通过一下几种方式实现hbase表的行数统计工作: 1.count命令 最直接的方式是在hb ...

  6. maven下载jar包源码配置

    两个依赖,就想下mail的源码包,因该怎么 <dependencies> <dependency> <groupId>javax.mail</groupId& ...

  7. 学习方法分享:为何一年半就能拿到大厂 offer

    毕竟是聊聊曾经,放一张大学课堂上灵光一现,手写的一个我曾经一直使用的网名 前言 原文地址:Nealyang/personalBlog 讲真,的确是运气,才有机会进大厂.也没想到,那篇一年半工作经验试水 ...

  8. pycharm最新版本激活码(永久有效) python安装教程

    Mac 系统自带python 1.打开终端, 输入 python 可以查看python当前版本. 2.输入“python”回车后即进入解释器,例如打印“hello world!”, 可输入 ‘ pri ...

  9. 转:ext的xtype值

    基本组件: xtype Class 描述 button Ext.Button 按钮 splitbutton Ext.SplitButton 带下拉菜单的按钮 cycle Ext.CycleButton ...

  10. ZIP压缩和解压字符串

    由于ZIP压缩会产生头信息, 所以当字符串长度没有达到一定规模的时候, 压缩后的长度可能比原来的还长 // 将一个字符串按照zip方式压缩和解压缩 public class ZipUtil { // ...