【题目链接】
【思路要点】
- 补档博客,无题解。
【代码】
#include<bits/stdc++.h> using namespace std; #define MAXN 105 int sg[MAXN], value[MAXN]; bool mark[MAXN]; int main() { sg[0] = 0; for (int i = 1; i < MAXN; i++) { memset(mark, false, sizeof(mark)); for (int j = 0; j < i; j++) for (int k = j; k < i; k++) mark[sg[j] ^ sg[k]] = true; int ans = 0; while (mark[ans]) ans++; sg[i] = ans; } int T; scanf("%d", &T); while (T--) { int n, ans = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &value[i]); if (value[i] & 1) ans ^= sg[n - i]; } if (ans == 0) { printf("-1 -1 -1\n0\n"); continue; } int cnt = 0; for (int i = 1; i <= n; i++) { if (value[i] == 0) continue; for (int j = i + 1; j <= n; j++) for (int k = j; k <= n; k++) if ((ans ^ sg[n - i] ^ sg[n - j] ^ sg[n - k]) == 0) { if (cnt == 0) printf("%d %d %d\n", i - 1, j - 1, k - 1); cnt++; } } printf("%d\n", cnt); } return 0; }