2021牛客暑期多校训练营1 A . Alice and Bob(博弈论 + 暴力)
2021牛客暑期多校训练营1 A . Alice and Bob
题意:Alice与Bob进行取石子游戏,规则为从一堆中去n个石子从另外一堆中取n*k个石子,不能取者输掉游戏,问谁获胜。
简要思路:暴力求解SG数组,对于每种取石子方案最多只有一种方式BoB会获胜。
代码实现:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int INF = 0x3f3f3f3f;
bool f[5050][5050];
void func(int x, int y){
//通过x累加,第一重循环代表每次增加的大小,从1开始
for(int i = 1;x + i <= 5000;i++){
//第二重代表另外的数多加多少倍x增加的数
for(int j = 0;y + j * i <= 5000;j++){
f[x + i][y + j * i] = true;//遇到的数就标记
}
}
//通过y累加
for(int i = 1;y + i <= 5000;i++){
for(int j = 0;x + j * i <= 5000;j++){
f[x + j * i][y + i] = true;
}
}
return ;
}
void init(){
for(int i = 0;i <= 5000;i++){
for(int j = 0;j <= 5000;j++){
if(!f[i][j])func(i,j);
}
}
return ;
}
signed main(){
init();
int t;
scanf("%d",&t);
while(t--){
int n,m;
scanf("%d %d",&n,&m);
if(f[n][m] == true)printf("%s\n","Alice");
else printf("%s\n","Bob");
}
system("pause");
return 0;
}

浙公网安备 33010602011771号