Monocarp
和Bicarp
生活在Berland
。Berland
的每一张公交车票都包含n(n是偶数)位数。
在晚上散步时,Monocarp
和Bicarp
发现了一张有某些位被擦掉而空着(擦掉的位数也是偶数)的公交车票。
Monocarp
讨厌“高兴”的车票,而Bicarp
则喜欢并收集它们。我们称一张车票“高兴”是说前2n位数之和和后2n位数之和相等。
Monocarp
和Bicarp
轮流进行操作(Monocarp
先手),每次操作,当前进行操作的玩家会在一个被空着的数位填上0到9。当所有数位都被填满,游戏结束。
如果这张车票在游戏结束后“高兴”,那么Bicarp
胜利;否则Monocarp
胜利。如果两人都足够聪明,请你确定谁会胜出。
输入格式
第一行一个整数n,表示车票的位数。
第二行包含一个长度为n的字符串,由0到9和?
组成,表示两人发现的这张车票。?
表示这一位被擦去了。保证?
有偶数个。注意,车票可以有前导零。
输出格式
如果Monocarp
最终会胜出,输出Monocarp
。否则输出Bicarp
。
题意翻译
输入输出样例
输入 #1复制
4 0523
输出 #1复制
Bicarp
输入 #2复制
2 ??
输出 #2复制
Bicarp
输入 #3复制
8 ?054??0?
输出 #3复制
Bicarp
输入 #4复制
6 ???00?
输出 #4复制
Monocarp
说明/提示
样例一中没有任何问号,所以赢家在游戏开始前就决定了,显然就是Bicarp
。
在样例二中,Bicarp
也会赢。在Monocarp
在一个空位填上一个数之后,Bicarp
可以在另一个空位填上一个一样的数,于是车票就变得“高兴”了。
#include<bits/stdc++.h>
#define int long long
#define ll long long
#define N 1000005
#define INF 0x3f3f3f3f
#define eps 1e-9
using namespace std;
char a[N];
signed main()
{
ios::sync_with_stdio(false);
int n;
cin>>n;
cin>>a;
int num1=0,num2=0,sum1=0,sum2=0;
for(int i=0;i<n/2;i++)
{
if(a[i]=='?') num1++;
else sum1+=a[i]-'0';
}
for(int i=n/2;i<n;i++)
{
if(a[i]=='?') num2++;
else sum2+=a[i]-'0';
}
if(sum1==sum2){
if(num1!=num2) cout<<"Monocarp"<<endl;
else cout<<"Bicarp"<<endl;
}
else if(sum1<sum2)
{
int ans=sum2-sum1;//两边相差的数
int num=num1-num2>>1;
if(num*9==ans) cout<<"Bicarp"<<endl;
else cout<<"Monocarp"<<endl;
}
else {
int ans=sum1-sum2;
int num=num2-num1>>1;
if(num*9==ans) cout<<"Bicarp"<<endl;
else cout<<"Monocarp"<<endl;
}
return 0;
}