标签:控制 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)\) ~
标签:控制 bit 游戏 put 出现 就是 code 接下来 using
原文地址:https://www.cnblogs.com/May-2nd/p/12838727.html