题目链接
题意:
给你一个n的序列(n=2*k),由数字和?(偶数个)组成,A和B分别操作(B先操作):把?变成一个任意的0-9的数字,如果最后前n/2和后n/2个数字之和相等,则A胜,否则B胜。
分析:
想一想?的作用,对于A来说就是赶快“平衡”两边,而对于B来说就是赶快让两边平衡不了。那么我们想一想B先操作会怎么办,他会把多的那边的某个?变成9(否则a会占更大优势),次时,A只能“跟风”把另一边的一个?变成9,于是一直这样下去,就还剩一边由?,此时,A和B可变的?的个数就相等了,于是每人变一个,当然,如果此时这边的和已经大了的话,那A就“凉了”,否则就计算一下能不能变成相等的,当然此时B就会判断,如果?个数*9/2就超了,那么B会很高兴的把他要变的数字都变成9,如果个数*9/2都不够,那么就B会很开心的把数字都变成0,可是如果正好是个数*9/2,那么就好了,A只需不管B怎么变就变为9-B变的数就好了,A就获胜了。
还是比较简单的,然后我们要做的就是判断一下就好了,最后就是代码了
#include <cstdio> #include <algorithm> using namespace std; int main(){ int n; scanf("%d",&n); int suma=0,sumb=0,ha=0,hb=0; char js; for(int i=1;i<=n/2;i++){ scanf(" %c",&js); if(js=='?') ha++; else suma+=js-'0'; } for(int i=1;i<=n/2;i++){ scanf(" %c",&js); if(js=='?') hb++; else sumb+=js-'0'; } if(ha<hb){ swap(ha,hb); swap(suma,sumb); } int wh=ha-hb; int c=sumb-suma; if(c<0) printf("Monocarp"); else if(wh/2*9==c) printf("Bicarp"); else printf("Monocarp"); return 0; }