#P8887. [DMOI-R1] 柯基棋
[DMOI-R1] 柯基棋
题目背景
小 A 和小 B 都是爱狗人士,且绝顶聪明,尤其喜爱柯基,于是他们发明了“柯基棋”。
题目描述
小 A 和小 B 在一个 的棋盘内轮流下棋。小 A 先手,小 B 后手。设当前有一只“柯基”被下在了棋盘的 处,那么棋盘内的 ,,, 处都会变为这只“柯基”的地盘,也就不能再放一只“柯基”。当一个人不能再放下一只“柯基”时,他就输了。
可惜,小 C 却不怎么喜欢柯基,所以他很反对小 A 和小 B 玩“柯基”棋,于是他非常喜欢捣乱棋局。当小 A 和小 B 一共下了 只“柯基”时,小 C 就会以当前 棋盘的中心为中心,扩大棋盘为 ,他一共会捣乱 次。
而你的任务是要判断这局棋是小 A 赢还是小 B 赢,如果小 A 赢,输出 A won
,否则输出 B won
。
由于他们两个人比较贪玩,所以他们一共会玩 局。
注意:
-
当小 A 和小 B 已经将原来的棋盘下到不能再下时,他们会直接跳转到小 C 下一次的捣乱(如果有)。
-
小 A 和小 B 知道小 C 会捣乱,且会按照自己的最优策略走。
由于数据过大, 由数据随机生成器给出。
输入格式
第一行一个正整数 ,表示 组数据。
每组数据一行三个正整数 ,其中 的作用见提示说明。
输出格式
共 行,每一行输出一个字符串 A won
或 B won
。
3
2 5 493
3 8 3219
8 4 1294
B won
A won
B won
提示
随机数据生成器
每一轮游戏的 由下方的生成器给出:
unsigned long long x[10000005];
unsigned long long xor_shift(unsigned long long &seed){
return seed^=seed>>12, seed^=seed<<25, seed^=seed>>27, seed*0x2545F4914F6CDD1D;
}
int main(){
//your code here
int n,q;
unsigned long long seed;
cin>>n>>q>>seed;
for(int i=1;i<=q;i++){
x[i]=x[i-1]+((xor_shift(seed)%(unsigned long long)(2*2)+1))*2;
}
//your code here
return 0;
}
样例解释
对于第一局游戏, 数组如下:6 8 16 18 22
。
对于第二局游戏, 数组如下:8 14 16 24 32 36 38 40
。
对于第三局游戏, 数组如下:4 8 10 16
。
数据范围
对于 的数据,。
对于 的数据,。
对于 的数据,,$x_i \equiv 0 \pmod 2\ (i\in[1,q]),0 \le seed \le 10^7$。