其他分享
首页 > 其他分享> > [博弈论]洛谷P1290

[博弈论]洛谷P1290

作者:互联网

https://www.luogu.com.cn/problem/P1290

题意:
给定两个正整数M和N,从其中较大的一个数减去较小的数的正整数倍,先得到0的人获胜

思路:
类Nim游戏,根据判定引理推。
但这是先得到0的人获胜,所以先要找必败局面终局。
当前局面,两个数有一个数是0,那就是必败局面,因为这就对应着,上一个人已经取到0了。

假设某个局面(a,b)是必胜局面,a>b,那它的前驱局面(a+b,a)则是必败局面,因为只能指向必胜局面。
而所有(2a+b,a),(3a+b,a)都是必胜局面,因为他们虽然会指向(a,b)但也指向(a+b,a)这个必败局面,所以他们都是必胜局面。
假设某个局面(a,b)是必败局面,那所有(a+b,a),(2a+b,a)..这些都是必胜局面更不用说了。
看代码。

bool dfs(int a,int b){
	if(a < b) swap(a,b);
	if(b == 0) return 0;
	if(dfs(b,a%b) == 0 || a > 2 * b) return 1;
	return 0;
}
int t,a,b;
int main(){
	cin>>t;
	while(t--){
		cin>>a>>b;
		bool flag = dfs(a,b);
		if(flag) cout<<"Stan wins"<<endl;
		else cout<<"Ollie wins"<<endl;
	}
	return 0;
}

标签:局面,博弈论,洛谷,必败,P1290,dfs,必胜,int,return
来源: https://www.cnblogs.com/dtdbm/p/14944300.html