[ZeroJudge] b902. 肉墊遊戲
題目連結:https://zerojudge.tw/ShowProblem?problemid=b902
手機打code CE好多次><
先討論當情況是一奇一偶時,可以證明先手必勝。一奇一偶拿了之後可能會變成兩偶、兩奇、一奇一偶。因為兩奇只能變成一奇一偶,那你又會回歸到原本的一奇一偶,這樣一直做下去遲早會變成(1,0)的情況,所以先手必勝。
接著是兩奇的情況,如上所述只能變成一奇一偶,所以先手必輸。
接著是兩偶的情況,兩偶可能會變成一奇一偶或兩偶(透過第二種操作),一奇一偶必輸,所以如果要贏只能變成兩偶的情形,那兩偶拿到最後一定會變成兩個一樣的數字,因為當兩偶以及兩數相等時先手必勝(這很好想吧),所以只要判斷能做多少次第二種操作的奇偶性即可知道誰必勝。
手機打code CE好多次><
先討論當情況是一奇一偶時,可以證明先手必勝。一奇一偶拿了之後可能會變成兩偶、兩奇、一奇一偶。因為兩奇只能變成一奇一偶,那你又會回歸到原本的一奇一偶,這樣一直做下去遲早會變成(1,0)的情況,所以先手必勝。
接著是兩奇的情況,如上所述只能變成一奇一偶,所以先手必輸。
接著是兩偶的情況,兩偶可能會變成一奇一偶或兩偶(透過第二種操作),一奇一偶必輸,所以如果要贏只能變成兩偶的情形,那兩偶拿到最後一定會變成兩個一樣的數字,因為當兩偶以及兩數相等時先手必勝(這很好想吧),所以只要判斷能做多少次第二種操作的奇偶性即可知道誰必勝。
#include <iostream> using namespace std; long long g(long long a,long long b){ return b ? a/b+g(b,a%b) : 0; } int main(){ int o;cin>>o; while(o--){ long long n,m;cin >>n>>m; int t=0; if(n&1)t++; if(m&1)t++; if(t == 0 && g(n,m)&1)puts(">//<"); else if(t==1)puts(">//<"); else puts(">\\\\<"); } }
留言
張貼留言