私はしませんどのようにどのようなああ\(QAQ \)どのようにゲーム理論とああ形而上学として期待\(QAQ \)
我々は状況いくつかの点を議論しました:
\(ケース1 \) :唯一の山とある1、その後、フリップ勝利
\(ケース2 \) :各スタックが1である、そして唯一の奇数、パリティを決定する必要が優勢、偶数フリップ敗北を失っています
\(ケース3 \) :唯一の山は、ヒープの残りの部分は1で、1ではない、その後の行によると、上側の手が完成し得るように選択することができますまたは唯一持っています
\(ケース4 \) :一般的には、どのように転換を考えて\(ケース\ 1-3 \)
今、イタリアは言うことであること:Kヒープ与えられた、私はちょうどされる最終的な勝利に行くために彼自身の束を取得したい((ケース3)\)\、これはなりません\(NIM \)まだゲームを?
だから異なる値のそれぞれの束の重みを置くかまで
\(コード:\)
#include<bits/stdc++.h>
using namespace std;
int read() {
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') { if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
return x * f;
}
int main() {
int T = read();
while(T --) {
int n = read(), x, ans = 0, sum = 0;
for(int i = 1; i <= n; ++ i) x = read(), ans ^= x, sum += x;
if(sum == n) puts(n & 1 ? "Brother" : "John");
else puts(ans ? "John" : "Brother");
}
return 0;
}