High Card Low Card G(田忌赛马进阶!!)
\(首先一定要明确一个观点,不然会完全没有思路\)
\(\bullet\)\(由于前半段大的更优,后半段小的更优。\)
\(\bullet\)\(所以,\)Bessie\(一定会在前(n/2)轮比拼中打出自己最大的(n/2)张牌。\)
\(\bullet\)\(那么,因为出的牌确定了,所以我们把比拼分为前半段和后半段。\)
\(前半段(大的牌赢)\)
\(\bullet\)因为\(Bessie可以根据Elsie的出牌顺序调整自己的出牌顺序,所以Elsie前半段怎么出牌都是一样的\)
\(那不妨把 Elsie的前(n/2)张牌从大到小排序\)
\(那我们把Bessie的最大的(n/2)张牌从大到小排序\)
策略
\(\bullet\)\(Bessie最大牌能赢Elsie的最大牌,那就赢。(能赢为什么不赢?)\)
\(\bullet\)\(Bessie最大牌输给Elsie的最大牌,那一定会输,不妨用最小的牌输给他。\)
后半段也是相同的策略。
扩展
\(但是田忌赛马中,规则更加复杂。\)
\(赢了赚钱,输了亏钱,平局不赚不亏\)
\(所以在上面策略的基础上多了一种情况,要是最大马相同怎么办?\)
\(\bullet\)若田忌的最慢马快与齐王的最慢马,两者比(能赢就赢呗)
\(\bullet\)其他,用田忌的最慢马与齐王的最快马比(贡献最大)
#include <bits/stdc++.h>
using namespace std;
int n;
int a[25009],c[25009],b[100009];
int q[25009],h[25009];
bool com(int a,int b){
return a>b;
}
int main()
{
cin>>n;
int ans=0;
for(int i=1;i<=n/2;i++)
{
cin>>a[i];
b[a[i]]=1;
}
for(int i=1;i<=n/2;i++)
{
cin>>c[i];
b[c[i]]=1;
}
sort(a+1,a+1+n/2,com);//前半段大到小
sort(c+1,c+1+n/2);//后半段小到大
for(int i=2*n;i>=1;i--)
{
if(q[0]<n/2&&b[i]==0)
q[++q[0]]=i;
else if(q[0]>=n/2&&b[i]==0)
h[++h[0]]=i;
}
sort(q+1,q+1+n/2,com);//前半段大到小
sort(h+1,h+1+n/2);//后半段小到打
int p1=1,p2=1,w1=n/2,w2=n/2;
while(p1<=w1)
{
if(q[p1]>a[p2])
ans++,p1++,p2++;
else
w1--,p2++;
}
p1=1,p2=1,w1=n/2,w2=n/2;
while(p1<=w1)
{
if(h[p1]<c[p2])
ans++,p1++,p2++;
else
w1--,p2++;
}
cout<<ans;
}
High Card Low Card G(田忌赛马进阶!!)的更多相关文章
- 【题解】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 ...
- 【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 ...
- 【刷题】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 ...
- [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 opposa ...
- 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< ...
随机推荐
- 搞懂 XML 解析,徒手造 WEB 框架
恕我斗胆直言,对开源的 WEB 框架了解多少,有没有尝试写过框架呢?XML 的解析方式有哪些?能答出来吗?! 心中没有答案也没关系,因为通过今天的分享,能让你轻松 get 如下几点,绝对收获满满. a ...
- ASP.NET MVC学习——控制器传递数据到view的简单案例
从控制传数据到view端的方法: 方法一:修改Control数据,添加ViewBag 1.ViewBag.+ 任意变量名 = "你想要输入的数据" 2.在Control对应的csh ...
- E - Roaming Atcoder
题解:https://blog.csdn.net/qq_40655981/article/details/104459253 题目大意:n个房间,,每个房间都有一个人,一共k天,在一天,一个人可以到任 ...
- Java中常用的七个阻塞队列第二篇DelayQueue源码介绍
Java中常用的七个阻塞队列第二篇DelayQueue源码介绍 通过前面两篇文章,我们对队列有了了解及已经认识了常用阻塞队列中的三个了.本篇我们继续介绍剩下的几个队列. 本文主要内容:通过源码学习De ...
- xshell下使用vim的编辑一个文件Ctrl+S和Ctrl+Q
xshell下使用vim的编辑一个文件,保存的时候习惯性的按了Ctrl+S 结构悲剧了.屏幕锁死了.按其他键都没有反应,exc也不行. 经过问度娘才知道. 原来Ctrl+S在Linux里,是锁定屏幕的 ...
- 嵌入式-01-LinuxC语言
一.必备Linux命令和C语言基础 1.Linux环境搭建(在第一阶段有提及). 2.文件和目录相关命令(一) (1)Linux的文件系统结构 /bin./boot./dev./etc./home./ ...
- HTML+CSS教程(四)选择器(id选择器,类选择器,标签选择器,子代选择器,后代选择器,组选择器,伪类选择器)/css引入页面的形式(行内样式、内嵌样式、外联样式)
一.回顾内容 前端的三大组成(三大模块) HTMl(超文本标记语言) 结构层 css(层叠样式表) 表现层:用来美化HTML结构 JS(Java script)(脚本语言) 行为层: ...
- mysql 更改默认字符集
mysql 默认字符集概述 首先,MySQL的字符集问题主要是两个概念: haracter Sets Collations 前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在 ...
- vim环境下空格和tab键互换
对于已保存的文件,可以使用下面的方法进行空格和TAB的替换 TAB替换为空格::set ts=4:set expandtab:%retab! 空格替换为TAB::set ts=4:set noexpa ...
- Java IO 流 -- 转换流: InputStreamReader OutputStreamWriter
java 中 转换流是以字符流的形式操作字节流,需要注意一下两点: 1.操作内容必须是纯文本 2.指定字符集避免乱码 操作控制台输入输出: try (BufferedReader br = new B ...