题意:一张票有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的更多相关文章

  1. 2019年腾讯PHP程序员面试题目分享

    有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群​jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...

  2. 20190924-LeetCode解数独题目分享

    解决数独 题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...

  3. 题目分享E 二代目

    题意:一棵点数为n的树,每个节点有点权,要求在树中中找到一个最小的x,使得存在一个点满足max(该点点权,该点相邻的点的点权+1,其他点的点权+2)=x 分析:首先要能把题目转化为上述题意 首先题目让 ...

  4. 题目分享D 二代目

    题意:给定一个T条边的无向图,求S到E恰好经过N条边的最短路径 T≤100 N≤1000000 分析:(据说好像假期学长讲过) 首先很容易想到的是dp[i][j][k]表示从i到j经过k条边的最短路径 ...

  5. 题目分享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 ...

  6. 题目分享V

    题意:现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k(k可以是任意整数,每次不一定相同)现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话Yes,否则No. 分 ...

  7. 题目分享T

    题意:蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会 ...

  8. 题目分享P

    题意: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作.当一方操作时,他们需要先选择一个不为根的 ...

  9. 题目分享H 二代目

    题意:有m个限制,每个限制l1,r1,l2,r2四个数,限制了一个长度为n的数第l1到r1位要与第l2到r2相同,保证r1-l1=r2-l2,求在限制下一共有多少种数 分析: 暴力的话肯定是从l1-r ...

随机推荐

  1. String 对象-->split() 方法

    1.定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法: string.split(separator,limit) 参数: separator:可选.字符串或正则表达式,从该参 ...

  2. Pytest系列(17)- pytest-xdist分布式测试的原理和流程

    pytest-xdist分布式测试的原理 前言 xdist的分布式类似于一主多从的结构,master机负责下发命令,控制slave机:slave机根据master机的命令执行特定测试任务 在xdist ...

  3. Linux C++ 网络编程学习系列(2)——多路IO之select实现

    select实现多路IO 源码地址:https://github.com/whuwzp/linuxc/tree/master/select 源码说明: server.cpp: 监听127.1:6666 ...

  4. php-fpm 进程数的设定

    近日,服务器出现异常,网站不能正常访问.经排查是php的问题. 在重启php-fpm时,恢复正常.1分钟之后又出现故障.查看php日志文件 /usr/local/php/var/log 后提示 WAR ...

  5. Math.max.apply()用法

    apply的一些其他巧妙用法 Math.max.apply( null, [12,23,34,45] ); //细心的人可能已经察觉到,在我调用apply方法的时候, // 第一个参数是对象(this ...

  6. 如何初学python?资深程序员浅谈,教你学会入门python

    我认为python应该是现在市面上最简单,也是最值钱的一门编程语言,所以学习的人是越来越多,但是,如何初学python?这个问题困扰着很多初学python的人,今天,给大家简单聊聊这个话题. 我曾经也 ...

  7. 怎么搭建python环境?很简单,就几步的事

    现在学习python的人越来越多了,而学习python必备的就是搭建python环境,那么,到底怎么搭建python环境呢? 首先,你需要有安装包,这个去官网下载就可以了,如果不会的话,可以看文章底部 ...

  8. **********Prometheus(三)******************

    通过centos7.x来部署Prometheus ####同步时间,否则后面监控会有异常!!!!!####### 1. 创建文件夹,上传软件包.解压并将prometheus promtool两个命令复 ...

  9. 绕过CDN查找真实 IP 姿势总结

    返回域名解析对应多个 IP 地址,网站可能部署CDN业务,我们就需要bypass CDN,去查找真正的服务器ip地址 0x01.域名搜集 由于成本问题,可能某些厂商并不会将所有的子域名都部署 CDN, ...

  10. 把川普射上太阳—如何用python制作小游戏

    1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始—运行—CMD),苹果系统 ...