题目大意

洛谷链接

给出一个长度为\(n\)的由数字组成的字符串(\(n\)是偶数)。但可能有偶数个位上的数字为?

现在有两个人\(A\)和\(B\),在?的位置上填\(0\)~\(9\)的数,一直到填完。

让\(A\)先手,若最后该字符串的左半边数字和等于右半边数字和 ,则\(B\)胜利,否则\(A\)胜利。

样例输入

8

?054??0?

样例输出

Bicarp

PS:更多样例和数据范围请打开原题链接吧,实在懒得粘了orz

思路

简单分情况讨论一下就可了。

设左半部分数字和为\(x\),?的个数为\(a\);右半部分数字和为\(y\),?的个数为\(b\)。

  • 若\(x=y\):

    • 若\(a\not= b\),例如100??919????,\(A\)总能操作让最后不相等。因此这种情况\(A\)必胜。
    • 若\(a=b\),例如1??919??,\(A\)填什么\(B\)就填什么就行了,因此这种情况\(B\)必胜。
  • 若\(x\not= y\),可设\(x>y\):
    • 若\(a\ge b\),例如??9??111??,\(A\)可以直接一直在左半部分放9,这样右半部分永远也不可能和左半部分相等。因此这种情况\(A\)必胜。
    • 若\(a<b\),例如?054??0?,前\(a\)个回合肯定是\(A\)一直在左半部分放9,\(B\)则维持平衡,则变成了90549?0?。此时两边的差为9,则\(A\)放任意一个数,\(B\)放另外一个相加得9的就可以了,例如90549801。但是比如?053??0?或者?055??0?,此时的\(x-y\)并不是9的倍数,分别可以改为9053990?9055900?,\(B\)就GG了。这就类似一个取石子问题,如果\(x-y\)是9的先手的步数倍(刚好可以补齐足够的9,当然\(x-y\)太大也不行),并且\(b-a\)是偶数(保证前\(a\)个回合后\(B\)先开始),那么就\(B\)赢,否则就是\(A\)赢。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
const char PlayerA[10]={"Monocarp"};
const char PlayerB[10]={"Bicarp"};
int n;
char s[maxn];
int x,y,a,b; int main(){
scanf("%d",&n);
scanf("%s",s+1);//个人习惯从1开始,当然也可以从0开始(的异世界生活) for(int i=1; i<=n/2; i++){
if(s[i]=='?')a++;
else x+=s[i]-'0';
} for(int i=n/2+1; i<=n; i++){
if(s[i]=='?')b++;
else y+=s[i]-'0';
} if(x<y){//如果是小于直接调换一下左右就行了
swap(x,y);
swap(a,b);
} if(x==y)
puts(a==b ? PlayerB : PlayerA);
else{
if(a>=b)puts(PlayerA);
else puts(((b-a)%2==0&&x-y==(b-a)/2*9) ? PlayerB : PlayerA);
}
return 0;
}

补充

取石子问题介绍(链接来自网络博客)

最新文章

  1. iframe跨域+
  2. ubuntu 创建用户
  3. Material Design学习
  4. getFragmentManager()和getSupportFragmentManager()
  5. linux命令每日一练习-mkdir,rm
  6. 安装chocolatey
  7. JS——JavaScript Confirm
  8. @ExceptionHandler
  9. JDBC连接MySQL数据库及示例
  10. Hadoop下各技术应用场景
  11. bootstrapUI
  12. ios学习之常见问题记录
  13. Java解决Hanoi问题
  14. 【Unity Shaders】Diffuse Shading——漫反射光照改善技巧
  15. web scraper 抓取网页数据的几个常见问题
  16. 3d
  17. 为什么wait()方法要放在同步块
  18. [c#]_ELVE_Message多功能用法
  19. js、jquery、jsp的区别
  20. Linux基础学习(1)--Linux系统简介

热门文章

  1. 解决 Mac 上 Docker 无法直接 ping 通的问题
  2. 《Java从入门到失业》第四章:类和对象(4.1):初识类和对象
  3. Django 仿ajax传递数据(Django十)
  4. linux 信号机制
  5. Vue+SpringBoot项目实战(一) 搭建环境
  6. 熬夜23天吃透,九大核心专题,成功收割了阿里、百度、美团3家offer
  7. rabbitmq的安装&amp;学习
  8. Python 之父为什么嫌弃 lambda 匿名函数?
  9. Java编程风格
  10. spring-dao.xml通常写法