题目分享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 ...
随机推荐
- 《面试经典系列》- SpringMVC原理及工作流程
前言 SpringMVC 作为 MVC 的开源框架,现在依旧是不少项目使用的重点框架.SpringMVC = Struts2 + Spring,SpringMVC就相当于 Struts2 + Spri ...
- 配置spark历史服务(spark二)
1. 编辑spark-defaults.conf位置文件 添加spark.eventLog.enabled和spark.eventLog.dir的配置修改spark.eventLog.dir为我们之前 ...
- hive常用函数一
Hive概念 Hive最适合于数据仓库应用程序,使用该应用程序进行相关静态数据分析,不需要快速响应出结果,而数据本身不会发生频繁变化. Hdfs分布式文件系统限制了hive,使其不支持记录级别的更新. ...
- vue(element)中使用codemirror实现代码高亮,代码补全,版本差异对比
vue(element)中使用codemirror实现代码高亮,代码补全,版本差异对比 使用的是vue语言,用element的组件,要做一个在线编辑代码,要求输入代码内容,可以进行高亮展示,可以切换各 ...
- group_concat有长度限制
group_concat有长度限制 group_concat 详细用法请点此链接. group_concat有长度限制!长度陷阱用了group_concat后,select里如果使用了li ...
- D - Fox And Two Dots DFS
Fox Ciel is playing a mobile puzzle game called "Two Dots". The basic levels are played on ...
- Crossing River POJ过河问题
A group of N people wishes to go across a river with only one boat, which can at most carry two pers ...
- Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述
Spark SQL模块,主要就是处理跟SQL解析相关的一些内容,说得更通俗点就是怎么把一个SQL语句解析成Dataframe或者说RDD的任务.以Spark 2.4.3为例,Spark SQL这个大模 ...
- python列表简介
什么是列表?如何使用列表?https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range 列表相关知识: ...
- 简单了解下CAP定理与BASE定理
分布式环境下的各种问题 通信异常 网络不可用风险高,消息丢失.消息延迟非常普遍 网络分区(脑裂) 网络发生异常情况,延迟增加,导致所有组成分布式系统的节点中,只有部分节点之间能够正常通信,而另一些 ...