[USACO15DEC]高低卡(白金)High Card Low Card (Platinum)
题目描述
Bessie the cow is a hu e fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other cows in the herd are good opponents. They are so bad, in fact, that they always play in a completely predictable fashion! Nonetheless, it can still be a challenge for Bessie to figure out how to win.
Bessie and her friend Elsie are currently playing a simple card game where they take a deck of 2N2N2N cards, conveniently numbered 1…2N1 \ldots 2N1…2N , and divide them into NNN cards for Bessie and NNN cards for Elsie. The two then play NNN rounds, where in each round Bessie and Elsie both play a single card. Initially, the player who plays the highest card earns a point. However, at one point during the game, Bessie can decide to switch the rules so that for the rest of the game, the player who plays the lowest card wins a point. Bessie can choose not to use this option, leaving the entire game in "high card wins" mode, or she can even invoke the option right away, making the entire game follow the "low card wins" rule.
Given that Bessie can predict the order in which Elsie will play her cards, please determine the maximum number of points Bessie can win.
贝西很喜欢玩一种纸牌游戏。
贝西和她的朋友艾尔西正在玩这个简单的纸牌游戏。游戏有2N张牌,牌上的数字是1到2N。把这些牌分成两份,贝西有N张,艾尔西有另外N张。接下来她们进行N轮出牌,每次各出一张牌。一开始,谁出的牌上的数字大,谁就获得这一轮的胜利。贝西有一个特殊权利,她可以在任意一个时刻把原本数字大的获胜的规则改成数字小的获胜,这个改变将会一直持续到游戏结束。特别的,贝西可以从第一轮开始就使用小牌获胜的规则,也可以直到最后一轮都还杂使用大牌获胜的规则。
现在,贝西已经知道了艾尔西出牌的顺序,她想知道她最多能够赢多少轮。
输入输出格式
输入格式:
The first line of input contains the value of N ( 2≤N≤50,0002 \leq N \leq 50,0002≤N≤50,000 ).
The next N lines contain the cards that Elsie will play in each of the
successive rounds of the game. Note that it is easy to determine Bessie's cards
from this information.
输出格式:
Output a single line giving the maximum number of points Bessie can score.
输入输出样例
4
1
8
4
3
3
说明
Here, Bessie must have cards 2, 5, and 6, and 7 in her hand, and she can use
these to win at most 3 points. For example, she can defeat the 1 card and then
switch the rules to "low card wins", after which she can win two more rounds.
提交地址 : Bzoj4391
F1[i] 表示从头开始按照方案一的最大赢的数;
F2[i] 表示从胃开始按照方案二的最大赢的数;
那么答案就是max(F1[i] + F2[i+1]);
合理性分析:
(坑)
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <set>
using namespace std;
#define regi register int n, k;
int a[], b[], cnt;
int use[]; int f1[], f2[]; set <int> s1, s2; int main()
{
cin >> n; for (regi int i = ; i <= n ; i ++){
scanf("%d", &b[i]);
use[b[i]] = ;
} for (regi int i = ; i <= * n ; i ++){
if (!use[i])
{
a[++cnt] = i;
s1.insert(i);
s2.insert(-i);
}
} for (register int i = ; i <= n ; i ++){
set <int> :: iterator it = s1.lower_bound(b[i]);
if (it != s1.end())
{
s1.erase(it);
f1[i] = f1[i-] + ;
}
else
{
f1[i] = f1[i-];
}
} for (register int i = n ; i >= ; i --){
set <int> ::iterator it = s2.lower_bound(-b[i]);
if (it != s2.end())
{
s2.erase(it);
f2[i] = f2[i+] + ;
}
else
{
f2[i] = f2[i+];
}
} int ans = f2[];
for (register int i = ; i <= n ; i ++){
ans = max(ans, f1[i] + f2[i+]);
} /* for (regi int i = 1 ; i <= n ; ++i)
{
printf("%d ", f1[i]);
}
puts("");
for (register int i = 1 ; i <= n ; i ++)
{
printf("%d ", f2[i]);
}
puts("");*/ cout << ans << endl;
return ;
}
zZhBr
[USACO15DEC]高低卡(白金)High Card Low Card (Platinum)的更多相关文章
- 【题解】P3129高低卡(白金)High Card Low Card
[题解][P3129 USACO15DEC]高低卡(白金)High Card Low Card (Platinum) 考虑贪心. 枚举在第几局改变规则,在改变规则之前,尽量出比它大的最小的牌,在改变规 ...
- 【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心)
[BZOJ4391][Usaco2015 dec]High Card Low Card(贪心) 题面 BZOJ 题解 预处理前缀后缀的结果,中间找个地方合并就好了. #include<iostr ...
- 【刷题】BZOJ 4391 [Usaco2015 dec]High Card Low Card
Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of ...
- [BZOJ4391][Usaco2015 dec]High Card Low Card dp+set+贪心
Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of ...
- 【dp 贪心】bzoj4391: [Usaco2015 dec]High Card Low Card
巧妙的贪心 Description Bessie the cow is a huge fan of card games, which is quite surprising, given her l ...
- [USACO15DEC]High Card Low Card (Platinum)
https://www.zybuluo.com/ysner/note/1300791 题面 贝西和她的朋友艾尔西正在玩这个简单的纸牌游戏.游戏有\(2N\)张牌,牌上的数字是\(1\)到\(2N\). ...
- BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
正解:贪心+线段树/set库 解题报告: 算辣直接甩链接qwq 恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明 (这里有个,很妙的想法,就是,从后往前推从前往后 ...
- [bzoj4391] [Usaco2015 dec]High Card Low Card 贪心 线段树
---题面--- 题解: 观察到以决策点为分界线,以点数大的赢为比较方式的游戏都是它的前缀,反之以点数小的赢为比较方式的都是它的后缀,也就是答案是由两段答案拼凑起来的. 如果不考虑判断胜负的条件的变化 ...
- bzoj4391 [Usaco2015 dec]High Card Low Card
传送门 分析 神奇的贪心,令f[i]表示前i个每次都出比对方稍微大一点的牌最多能赢几次 g[i]表示从i-n中每次出比对方稍微小一点的牌最多赢几次 ans=max(f[i]+g[i+1]) 0< ...
随机推荐
- 配置phpmyadmin连接远程 MySQL数据库
引言:1.phpmyadmin程序所在服务器:192.168.1.1,访问地址为:http://192.168.1.1/phpmyadmin2.MySQL数据库所在服务器:192.168.1.2, ...
- Spring Boot应用上传文件时报错
问题描述 Spring Boot应用(使用默认的嵌入式Tomcat)在上传文件时,偶尔会出现上传失败的情况,后台报错日志信息如下:"The temporary upload location ...
- Web之-----弹出确认框控件应用
引用文件!-------- <link rel="stylesheet" type="text/css" href="@Url.FrontUrl ...
- Spring Boot 入门之整合 log4jdbc 篇(六)
博客地址:http://www.moonxy.com 一.前言 Spring Data JPA 默认采用 Hibernate 实现.Hibernate 的 showSql 配置只打印 SQL,但并不打 ...
- Java Synchronized Method This Static Class Object 区别
1. 必须基于对象 Synchronized Method 和 Synchronized(this) 块,除了范围小点 (方法和块),没差别都是阻塞整个对象 - 如果对象有多个 Synchronize ...
- Recovery启动流程--recovery.cpp分析
这篇文章主要通过分析高通recovery目录下的recovery.cpp源码,对recovery启动流程有一个宏观的了解. 当开机以后,在lk阶段,如果是recovery,会设置boot_into_r ...
- Hadoop 之 HDFS的使用
1.列出hadoop下面的目录, hadoop fs -ls / 进入user hadoop fs ls /user 2.再usr/root下新建input目录 hadoop -mkdir inpu ...
- 数据分析--pandas的基本使用
一.pandas概述 1.pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. 2.pandas的主要功能 具备对其功能的数据结构DataFrame.Series 集成时间序 ...
- Knative 实战:基于 Knative Serverless 技术实现天气服务-上篇
提到天气预报服务,我们第一反应是很简单的一个服务啊,目前网上有大把的天气预报 API 可以直接使用,有必要去使用 Knative 搞一套吗?杀鸡用牛刀?先不要着急,我们先看一下实际的几个场景需求: 场 ...
- Maven 梳理 - Maven中的dependencyManagement 意义
1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 2.pom.xml文件中,jar的版本判断的两种途径 1:如果dependenci ...