[ZeroJudge] b902. 肉墊遊戲

題目連結:https://zerojudge.tw/ShowProblem?problemid=b902

手機打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(">\\\\<");
    }   
}

留言

這個網誌中的熱門文章

[TIOJ]1617. [Interactive] 中位數

[TIOJ]1337. 隕石

[TIOJ]1994. 冰塊線