[博弈论] P10398 『STA - R5』Remove and Decrease Game

· · 题解

a_1\dots a_n 升序排列。

const int N = 2e5 + 5; int T, n, a[N];

int main(){ cin >> T; while(T--){ scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d", &a[i]); sort(a + 1, a + 1 + n); if(n == 1) printf("Alice\n"); else if(n == 2) printf("%s\n", (a[1] & 1) ? "Bob" : "Alice"); else{ int cnt = 0; for(int i = 1; i <= n - 2; ++i) cnt += (a[i] == i); //a[i]=i时可以进行特殊操作。不用break是因为a[i]!=i则后面都不满足条件 if((n - 1 + a[n - 1]) & 1) printf("Alice\n"); else printf("%s\n", (cnt & 1) ? "Alice" : "Bob"); } } return 0; }