2021牛客暑期多校训练营1.Alice and Bob

2021牛客暑期多校训练营1.Alice and Bob

题意:两人博弈,两堆石头,每次操作,从一堆取 k 个(k>0),同时从另一堆取ks个(s>=0),拿走场上最后石子的人胜利。
思路:由所有已有的先手必败状态,筛选出新的状态,若(i,j)先手必败,则(i+x,j+x
y)和(i+x*y,j+x)为先手必胜

#include<bits/stdc++.h>
using namespace std;
bool vis[5005][5005];
void pre()//预处理
{
	for(int i=0;i<=5000;i++){
		for(int j=0;j<=5000;j++){
			if(!vis[i][j]){
				for(int x=1;i+x<=5000;x++){
					for(int y=0;j+y*x<=5000;y++){
						vis[i+x][j+x*y]=1;
					} 
				}
				for(int x=1;j+x<=5000;x++){
					for(int y=0;i+x*y<=5000;y++){
						vis[i+x*y][j+x]=1;
					} 
				}
			}
		}
	}
}
int main()
{
	int t,n,m;
	pre();
	cin>>t;
	while(t--){
		scanf("%d%d",&n,&m); 
		if(vis[n][m]){
			printf("Alice\n");
		}
		else{
			printf("Bob\n");
		}
	}
	return 0; 
}
上一篇:GBase RTSync同步工具应用


下一篇:牛客2021年多校训练营<1>