题目大意
errorgorn与maomao90再进行一场比赛。有 $ n $ 段木头,每段长度为 $ a_i $ 。每个人可以将长度为 $ x $ 木头分为两段长度为 $ y $ 与 $ z $ 的木头, $ x \ y \ z $ 为正整数,且 $ x = y + z $ 。如果轮到一个人时,没有任何一个木头可以再被分成两段(没有任何一个木头的长度大于 $ 1 $ ),则这个人输了。并且他们每个人都会用最好的决策。
解题思路
刚开始看完题目时,以为是博弈论,想了一会没什么头绪,不明白究竟怎样才算是最好的决策,只好手动模拟一下。结果惊奇的发现,无论每个人采取什么样的策略,最后的结果都是一样的。也就是说比赛的输赢与采取什么策略无关,在游戏开始的时候就已经结束了。
具体的证明:将一个数 $ x $ 变成 $ x $ 个 $ 1 $ 的过程中,无论怎么分都要分 $ x – 1 $ 次。那么在一场比赛的过程中,一共会有 $ \sum_{1}^n ( a_i – 1 ) $ 次操作。
由于是errorgorn先手,所以当可操作次数为奇数时,maomao90最后将无法操作,即errorgorn将赢得比赛。而当可操作次数为偶数时,errorgorn最后将无法操作,即maomao90将赢得比赛。
代码
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
int t,n,a,ans;
int main(){
scanf("%d",&t);
while(t--){
ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a),ans+=a-1;
if(ans%2) printf("errorgorn\n");
else printf("maomao90\n");
}
}