题目大意

洛谷链接

给出一个长度为\(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;
}

补充

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

【博弈论】CF 1215D Ticket Game的更多相关文章

  1. Codeforces 1215D Ticket Game 题解

    Codeforces 1215D Ticket Game 原题 题目 Monocarp and Bicarp live in Berland, where every bus ticket consi ...

  2. Codeforces 1215D. Ticket Game

    传送门 博弈,发现情况有点多,分析一下把有用的状态提取出来 显然各个位置的数字是没用的,我们只要知道两边的数字和分别是多少 并且状态显然和左右两边的 "?" 数量有关 因为最终我们 ...

  3. CF 938D Buy a Ticket 题解

    题目 Musicians of a popular band "Flayer" have announced that they are going to "make t ...

  4. Ticket Game CodeForces - 1215D 博弈题

    题目描述 Monocarp and Bicarp live in Berland, where every bus ticket consists of n digits (n is an even ...

  5. JZYZOJ 2002 [cf] 石江豪pk李震 博弈论 sg函数

    http://172.20.6.3/Problem_Show.asp?id=2002 https://blog.csdn.net/qq_24451605/article/details/5015497 ...

  6. cf#512 C. Vasya and Golden Ticket

    题目链接 http://codeforces.com/contest/1058/problem/C 这题还是暴力最方便,和的情况最多有n*a[i]  900种把每种都试一遍 #include<b ...

  7. CF 256C Furlo and Rublo and Game【博弈论,SG函数】

    暴力的求SG函数会超时,正解是先处理出10^6以内的SG值,对于更大的,开根号之后计算出. 小数据观察可以发现sg函数值成段出现,而且增长速度很快,因此可以计算出来每一段的范围,只需打表即可. Nim ...

  8. CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)

    传送门 解题思路 首先很好写出一个\(O(ab)\)的记搜,但发现这样无法处理\(a=1\)和\(b=1\)的情况,这两种情况需要特判.首先\(a=1\)的情况,就是如果当前选手让\(a+1\)必胜, ...

  9. 【最短路】CF 938D Buy a Ticket

    题目大意 流行乐队"Flayer"将在\(n\)个城市开演唱会,这\(n\)个城市的人都想去听演唱会,每个城市的票价不同,于是这些人就想是否能去其他城市听演唱会更便宜,但是去其他的 ...

随机推荐

  1. datattable循环读取数据用于循环遍历checkboxlist里的项目

    DataTable dt = bptb.GetList("Pro_ID="+id).Tables[0]; foreach (ListItem li in from DataRow ...

  2. Python爬取NBA虎扑球员数据

    虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球.足球.游戏电竞.运动装备.影视.汽车.数码.情感等一切人和事的见解,热闹.真实.有温度. 受害者地址 https://nba.hupu ...

  3. Java SPI详细的例子

    先翻一个来自于Baeldung的介绍: 为了更通俗易懂我就没有直译,如果有不严谨的地方请大神指教. JavaSPI的定义 Java SPI defines four main components S ...

  4. oracle之序列

    序列 15.1 序列是生成唯一整数值的结构,它的典型用途是用于主键值. 结合真题演示伪列nextval, currval用法 CREATE SEQUENCE dept_deptnoINCREMENT ...

  5. Java基础之LinkedHashMap原理分析

    知识准备HashMap 我们平时用LinkedHashMap的时候,都会写下面这段 LinkedHashMap<String, Object> map = new LinkedHashMa ...

  6. 解析nohup java -jar xxx &

    一直就知道 java -jar xx ctrl+c就退出了 来自这个文 https://blog.csdn.net/wngpenghao/article/details/83022185 java - ...

  7. 刷题[GXYCTF2019]BabySQli

    解题思路 只有一个登陆框,查看源码,链接到search.php后发现注释中有这样一段内容 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSC ...

  8. Spring Eureka 本地Docker集群部署

    故事背景 最近因为产线使用的服务与发现服务,使用的是Spring Cloud Eureka集群部署,为了以后调试产线的问题,想在本地搭建和产线一样的环境.产线的所有服务都是基于K8s和Docker部署 ...

  9. Appium 用途和特点

    Appium 是一个移动 App (手机应用)自动化工具. 手机APP 自动化有什么用? 自动化完成一些重复性的任务 比如微信客服机器人 爬虫 就是通过手机自动化爬取信息. 为什么不通过网页.HTTP ...

  10. 使用MATLAB 2019 App Design 工具设计一个 电子日记App

    使用MATLAB 2019 App Design 工具设计一个 电子日记App1.1 前言:由于信号与系统课程需要,因此下载了MATLAB软件,加之对新款的执着追求,通过一些渠道,下载了MATLAB ...