题解 CF346A 【Alice and Bob】
我愿称之为伪博弈论题。
题解
注意到题设所给过程很像辗转相除法。由于
接着注意到
当一名玩家无法操作时,整个序列肯定是
所以操作了恰好
所以根据
参考代码
#include<bits/stdc++.h>
#define up(l, r, i) for(int i = l, END##i = r;i <= END##i;++ i)
#define dn(r, l, i) for(int i = r, END##i = l;i >= END##i;-- i)
using namespace std;
typedef long long i64;
const int INF = 2147483647;
int qread(){
int w = 1, c, ret;
while((c = getchar()) > '9' || c < '0') w = (c == '-' ? -1 : 1); ret = c - '0';
while((c = getchar()) >= '0' && c <= '9') ret = ret * 10 + c - '0';
return ret * w;
}
int main(){
int n = qread(), d = 0, m = 0;
up(1, n, i){
int a = qread(); m = max(m, a);
d = __gcd(a, d);
}
puts((m / d - n) % 2 == 1 ? "Alice" : "Bob");
return 0;
}