题目分享X
题意:一张票有n位数,如果这张票的前一半数字的和等于后一半数字的和(n一定是偶数),就称这张票为快乐票。有些数被擦除了,标记为’?’(’?‘的个数也是偶数),现在Monocarp 和 Bicarp 进行一个游戏,两人轮流将’?'变换成0到9的任意一个数,Monocarp先手,如果最后票为快乐票则Bicarp赢,否则Monocarp赢。
分析:这。。。没想到5分钟就过了,可能是这种题的套路见多了。。。
首先,将题目转换成左边x个问号,现有和为sx,右边y个问号,现有和为sy,然后再开始写数
首先不难发现,sx-sy才对结果有影响,单独的sx或sy对结果都没有影响,这是显然的
那么是不是只有x-y才对结果有影响呢?显然也是的,我是这么想的,可能有些不严谨
如果有人在左边写的a,那么另一个人显然一定会在右边也写a,因为如果右边的人不写a,而写b,那肯定说明b对于右边人来说比a更优,
也就是说右边的人会获得b-a这样的“好处”,这里的好处可以理解为帮助他离赢更进一步的垫脚石
要知道两边人写数的范围是相同的(0-9),左边的人咋可能让右边人白白获得好处,那么左边的人就会写b
要注意的是这是个套娃,但并不是个永久套娃
是个套娃的意思是,那么这时右边的人肯定会选择比b更优的c,而左边人又会选c(这里的选可以理解为心理上的博弈,虽然有点抽象或者是中二,但仔细想想就是这么回事)
但为什么不是个永久套娃呢?要知道,abc一定是满足单调性的,比如如果b>a会使右边人更优,那么如果c<a那么一定会使右边人更劣
也就是说你可以理解为一条单向的路,当然这条路是有尽头的,而且尽头一定是0或者9
这也是一个很重要的结论,在这里我们不单单证明了只有x-y对结果有影响,还证明了这两个人只会选0或9
记住这两个结论,
先用一用第一个结论,题目就被转换成了一共有p个问号(在同一边),数字和为q(在另一边) 这里的p咱就当他是正的,q就随意,这种假设显然是可以的,比如q如果是负的那就相当于数字和与问号在同一边呗,只不过咱这样规定左右比较好考虑,也比较好计算
转化完题目,再用上第二个结论,既然他俩现在站在同一边了,在庆幸他们没打起来的同时我们也要考虑接下来会发生什么,
如果一个人写了9,那么另一个人必然写0,因为显然对第一个人来说的“好处”对第二个人来说就是“坏处”
具体来说,如果将左边数字和增加对于第一个人来说是好处的话,那他就会选择写9并且这对第二个人来说就一定是“坏处”,也就是说第二个人不想让数字和增加,所以他会写0,
反之亦然
所以他们俩一人写一次下来以后,左边数字和一定增加9,左边一共有x-y个问号的话,那就一定增加(x-y)/2*9
也就是说,我们其实只需要判断(x-y)/2*9是否等于sy-sx即可,而且如果等于,就是后手也就是Bicarp赢了,不相等就是Monocarp赢了
还有一点就是这个判等于比较的并不是绝对值,就是原本的值,可以稍微想一下
如果右边的和是负数,也就是说左边既有数字又有问号,显然是不可能相等的
#include<cstdio>
using namespace std; const int maxn=2e5+; char a[maxn]; int main()
{
int n,l=,r=,lsum=,rsum=;
scanf("%d%s",&n,a);
for(int i=;i<n/;i++) if(a[i]=='?') l++;else lsum+=a[i]-'';
for(int i=n/;i<n;i++) if(a[i]=='?') r++;else rsum+=a[i]-'';if(rsum-lsum==(l-r)/*) printf("Bicarp");
else printf("Monocarp");
return ;
}
题目分享X的更多相关文章
- 2019年腾讯PHP程序员面试题目分享
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...
- 20190924-LeetCode解数独题目分享
解决数独 题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...
- 题目分享E 二代目
题意:一棵点数为n的树,每个节点有点权,要求在树中中找到一个最小的x,使得存在一个点满足max(该点点权,该点相邻的点的点权+1,其他点的点权+2)=x 分析:首先要能把题目转化为上述题意 首先题目让 ...
- 题目分享D 二代目
题意:给定一个T条边的无向图,求S到E恰好经过N条边的最短路径 T≤100 N≤1000000 分析:(据说好像假期学长讲过) 首先很容易想到的是dp[i][j][k]表示从i到j经过k条边的最短路径 ...
- 题目分享C 二代目
题意:一个数列是由 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6.....组成,也就是1-1,1-2,1-3......并且如果遇到多位数也要拆成数字比如1-10 ...
- 题目分享V
题意:现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k(k可以是任意整数,每次不一定相同)现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话Yes,否则No. 分 ...
- 题目分享T
题意:蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会 ...
- 题目分享P
题意: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作.当一方操作时,他们需要先选择一个不为根的 ...
- 题目分享H 二代目
题意:有m个限制,每个限制l1,r1,l2,r2四个数,限制了一个长度为n的数第l1到r1位要与第l2到r2相同,保证r1-l1=r2-l2,求在限制下一共有多少种数 分析: 暴力的话肯定是从l1-r ...
随机推荐
- Hadoop(一) centos7 jdk安装,hadoop安装|3
安装JDK 下载jdk https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择最 ...
- cgdb使用方法
cgdb --args [exe_name] [arg1] [arg2] [arg3] [...] 进入代码窗口 按ESC键 进入调试窗口 按i键 调试命令 r 运行 n 单步执行(不进入函数) s ...
- 大数据篇:Spark
大数据篇:Spark Spark是什么 Spark是一个快速(基于内存),通用,可扩展的计算引擎,采用Scala语言编写.2009年诞生于UC Berkeley(加州大学伯克利分校,CAL的AMP实验 ...
- Gitflow分支管理策略
Gitflow存在两个记录项目历史的分支 Master分支:存储(官方的,正式的)项目发布历史记录的分支. develop分支:充当功能的集成分支. Develop分支将包含项目的完整历史记录,而ma ...
- H - Knight Moves DFS
A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the sh ...
- UML(续)
活动图 活动图定义 活动图描述了在一个过程中,顺序的/并行的活动及其之间的关系 应用于商业过程.工作流(业务过程).复杂算法的建模 活动图是顶点和弧的集合 活动节点 动作 流 对象值 注解和约束等 建 ...
- 百度关键词搜索工具 v1.1|url采集工具 v1.1
功能介绍:关键词搜索工具 批量关键词自动搜索采集 自动去除垃圾二级泛解析域名 可设置是否保存域名或者url 持续更新中
- 小小小小小flag
2020:300道题 小小小小小flag 150红题 100道橙题 50道黄题 努力变强!加油 我的主页: 主页https://www.luogu.com.cn/user/306734 谢谢大家,目前 ...
- 关于JS垃圾回收机制
一.垃圾回收机制的必要性 由于字符串.对象和数组没有固定大小,所以当它们的大小已知时,才能对它们进行动态的存储分配.JavaScript程序每次创建字符串.数组或对象时,解释器都必须分配内存来存储那个 ...
- BJDCTF 2nd web
先贴一下Y1ng大佬的WP elementmaster 脑洞确实大,源码中hidden的id可以用hex解码成Po. 在URL后面输入Po.php得到一个点, 然后不知所措 被水淹没 实际上这里是要遍 ...