zoukankan      html  css  js  c++  java
  • 题目分享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+1; char a[maxn]; int main() { int n,l=0,r=0,lsum=0,rsum=0; scanf("%d%s",&n,a); for(int i=0;i<n/2;i++) if(a[i]=='?') l++;else lsum+=a[i]-'0'; for(int i=n/2;i<n;i++) if(a[i]=='?') r++;else rsum+=a[i]-'0';if(rsum-lsum==(l-r)/2*9) printf("Bicarp"); else printf("Monocarp"); return 0; }
  • 相关阅读:
    2020年. NET Core面试题
    java Context namespace element 'component-scan' and its parser class ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher 解决方法
    vue 淡入淡出组件
    java http的get、post、post json参数的方法
    vue 父子组件通讯案例
    Vue 生产环境解决跨域问题
    npm run ERR! code ELIFECYCLE
    Android Studio 生成apk 出现 :error_prone_annotations.jar (com.google.errorprone:error) 错误
    记忆解析者芜青【总集】
    LwIP应用开发笔记之十:LwIP带操作系统基本移植
  • 原文地址:https://www.cnblogs.com/lin4xu/p/12757981.html
Copyright © 2011-2022 走看看