洛谷P1247 取火柴游戏
经典NIM游戏。
取XOR和即可。
注意输出方案时,找到大于异或和sum的,变为a[i] ^ sum即可。
1 #include <cstdio> 2 const int N = 500010; 3 int a[N]; 4 int main() { 5 int n, sum = 0; 6 scanf("%d", &n); 7 for(int i = 1; i <= n; i++) { 8 scanf("%d", &a[i]); 9 sum ^= a[i]; 10 } 11 12 if(!sum) { 13 printf("lose"); 14 return 0; 15 } 16 17 for(int i = 1; i <= n; i++) { 18 if((a[i] ^ sum) <= a[i]) { 19 printf("%d %d\n", a[i] - (a[i] ^ sum), i); 20 a[i] = a[i] ^ sum; 21 break; 22 } 23 } 24 for(int i = 1; i <= n; i++) { 25 printf("%d ", a[i]); 26 } 27 return 0; 28 }