码迷,mamicode.com
首页 > 其他好文 > 详细

P1290 欧几里德的游戏

时间:2020-05-06 21:27:34      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:控制   bit   游戏   put   出现   就是   code   接下来   using   

我们将两数大小互换作为分界点,这样就可以看到,整个游戏被分成了很多段。考虑将这些段分成两类,最多减的次数为 \(1\) 和最多减的次数大于 \(1\)

前者不用说,只能这么做,问题就是后者两人会怎么决策。当后者最后一次出现时,先手可以根据后面前者出现次数的奇偶性进行调整,取完这一段或者将这一段剩下的次数取到 \(1\)。接下来的决策就都是固定的了,先手显然必胜。

那么最后一次出现后者时先手是必胜态。同理,倒数第二次出现后者时先手一样可以进行调整使得先手拿到最后一次出现后者时的先手,所以依次推下去,第一次出现后者时的先手必胜。直接模拟这个过程即可。

本题的精髓就在于控制

code:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	bool rem;
	int c,n,m;
	cin>>c;
	while(c--)
	{
		cin>>m>>n;
		rem=0;
		if(m<n)swap(m,n);
		while(n<<1>m&&n<m)m-=n,swap(n,m),rem^=1;
		puts((rem?"Ollie wins":"Stan wins"));
	}
	return 0;
}

\(\mathcal O(\log N)\) ~

P1290 欧几里德的游戏

标签:控制   bit   游戏   put   出现   就是   code   接下来   using   

原文地址:https://www.cnblogs.com/May-2nd/p/12838727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!