P1290 欧几里德的游戏
Posted may-2nd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1290 欧几里德的游戏相关的知识,希望对你有一定的参考价值。
我们将两数大小互换作为分界点,这样就可以看到,整个游戏被分成了很多段。考虑将这些段分成两类,最多减的次数为 (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 欧几里德的游戏的主要内容,如果未能解决你的问题,请参考以下文章