1907
#include <iostream> using namespace std; int main() { /** * 充裕堆: 火柴根数 > 1 * 孤单堆: 火柴根数 = 1 */ int sum1; //充裕堆的个数 int sum2; //孤单堆的个数 int ans; //异或.(用来判断是否是奇异局势) int t; scanf("%d", &t); while (t--) { sum1 = 0; sum2 = 0; ans = 0; int n; scanf("%d", &n); //a[i] :表示第i堆的火柴数目 int a[n]; int i; for (i = 0; i < n; ++i) { scanf("%d", &a[i]); if (a[i] >= 2) { sum1++; } else { sum2++; } ans ^= a[i]; } /** * 如果ans != 0 && sum1 != 0 || ans == 0 && sum1 == 0, * 那么,John赢 */ if ((ans != 0 && sum1 != 0) || (ans == 0 && sum1 == 0)) { printf("John\n"); } else { printf("Brother\n"); } } }
2509
#include <iostream> using namespace std; int main() { /** * 充裕堆: 火柴根数 > 1 * 孤单堆: 火柴根数 = 1 */ int sum1; //充裕堆的个数 int ans; //异或.(用来判断是否是奇异局势) int n; while (scanf("%d", &n)!=EOF) { sum1 = 0; ans = 0; int a[n]; //a[i] :表示第i堆的火柴数目 int i; for (i = 0; i < n; ++i) { scanf("%d", &a[i]); if (a[i] >= 2) sum1++; ans ^= a[i]; } if ((ans != 0 && sum1 == 0) || (ans == 0 && sum1 >= 2)) { printf("No\n"); } else { printf("Yes\n"); } } }