鏈接:登錄—專業IT筆試面試備考平臺_牛客網
來源:牛客網
Alice 和 Bob?是一對競技編程選手,他們路過了一家氣球店,發現有 m?個大愛心氣球和 n個小愛心氣球。他們決定玩一個游戲,游戲規則如下:
- Alice先手拿球,兩人輪流進行。
- 每個人在自己的回合只能選擇一種類型的氣球。
- 對于大愛心氣球,每次拿取可以選擇取 5個、2個或 1個。
- 對于小愛心氣球,每次拿取可以選擇任意數量 (不含0個)。
游戲終止的條件是當所有的氣球都被拿取完畢,最后一個球被拿取的人即為獲勝者。
假設兩人都足夠聰明并采取最優策略,請問誰將獲勝?
分析:
選5個的情況可以用212,221代替,結果相同,所以只要考慮一二,因為1,2都比3小,并且1+2==3,所以最后這堆剩下的為m%3個,然后發現滿足nim博弈的前提,任意取至少一個,至多全部,最后取的贏,所以直接用nim博弈的結論,nim和為0,那么后手贏,而這里只有兩堆,則兩堆相同后手贏,否則先手贏。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
void solve()
{ll m,n;cin>>m>>n;//只考慮1,2,(5=2+3),nim博弈if(m%3==n)//nim和為0,即m%3異或n等于0后手贏,即m%3==n{cout<<"Bob"<<'\n';}else cout<<"Alice"<<'\n';
}
int main()
{ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);ll t=1;cin>>t;while(t--)solve();return 0;
}