start:25 7
stan:11 7
ollie:4 7
stan:4 3
ollie:1 3
stan:1 0
stan贏得了遊戲的勝利。
現在,假設他們完美地操作,誰會取得勝利呢?
思路:感覺這題很像尼姆博弈的變形,同樣都是n堆石子任意拿,但是尼姆博奕是在任意一堆拿石子,而這個必須一堆一堆地拿,拿完這一堆才能拿下一堆.
然後我們這樣想,假設當前堆誰拿了最後乙個誰就必輸,那麼肯定希望把最後乙個留給對方.所以假如我是先手,假如當前堆只有1個,那麼我只能乖乖地拿了,必輸.假如有兩個,我肯定只拿乙個,假如有三個我肯定拿兩個, 這一點又很像巴什博奕,所有只要大於乙個我就能贏.同理假如當前堆誰拿了最後乙個誰就必贏,我是先手的話我肯定一次就拿完,所以無論有多少堆,只要當前堆大於乙個先手必勝.
那麼怎麼知道當前堆拿最後乙個是贏還是輸,遞迴求解即可,假如n/m == 1,那麼sg(n,m) = !sg(m,n%m),而sg(m,n%m)又能繼續按照此規則判斷,假如n/m> 1,則直接為必勝態.
**:
#include#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const int maxn = 2e5+5;
const double eps = 1e-12;
const int inf = 0x3f3f3f3f;
map::iterator it;
ll a,b;
int get_sg(ll x,ll y)
int main()
return 0;
}
P1290 歐幾里德的遊戲
原題鏈結 模擬賽的一道題,我大眼一看是博弈論的題,想都沒想直接跳過 我完全不會博弈論 看了題解之後發現其實並不難 直接看結論 記當前狀態為 d x,y 且 x y 若此時 x 2y 則目前的操作者勝利 下面是證明 假定 x ky r 其中 r x y k x y 根據假設,k 2 此時討論 d y,...
P1290 歐幾里德的遊戲
歐幾里德的兩個後代stan和ollie正在玩一種數字遊戲,這個遊戲是他們的祖先歐幾里德發明的。給定兩個正整數m和n,從stan開始,從其中較大的乙個數,減去較小的數的正整數倍,當然,得到的數不能小於0。然後是ollie,對剛才得到的數,和m,n中較小的那個數,再進行同樣的操作 直到乙個人得到了0,他...
P1290 歐幾里德的遊戲
傳送門 肯定是博弈論啦 因為大家都 完美地操作 所以結果是肯定的 那考慮怎樣先手才能控制必勝局面 設大的數是 a,另乙個數是b 如果把數變成 b,a b的局面必勝 那先手肯定走這一步,先手必勝 如果b,a b的局面必輸 那先手就要盡量避免,而且要盡量讓後手變成不得不取成b,a b的必輸局面 考慮怎樣...