HDU 3389 Game 階梯博弈變形

2021-09-12 14:38:10 字數 1228 閱讀 3679

題意:編號1-n的盒子,當你的編號滿 b思路:首先要了解一下什麼是階梯博弈,參考鏈結.

對於一般的階梯博弈,當到達地面(即0階)的時候就是終止條件,但是這道題由於 (a+b)%2=1 && (a+b)%3=0這個條件的限制,所以我們可以知道只有當(a+b)%6==3的時候才能進行狀態轉移.

這道題,我們通過畫圖可以知道,最後的終止條件是當 i == .而且不管怎麼樣,如果乙個數最後跳到末狀態的步數是奇數是,那麼從這個跳到末狀態的其他方法的步數也是奇數

舉個例子

14->13->8->7->2->1(奇數步)

或者14->7->2-1(奇數步)

或者14->1(奇數步).

在這點上,這就和階梯博弈有類似的地方,階梯博弈最後算異或的時候也是對所有奇數階進行異或,所以對應到這道題上就是對所有到末狀態為奇數步的盒子進行異或.

ps:在階梯博弈中,從奇數階移動到偶數階可以看成在nim中取走石子,因為在階梯博弈中,從偶數階移動到末狀態始終是必敗態.

#include

#define eps 1e-8

#define inf 0x3f3f3f3f

#define pi acos(-1)

#define lson l,mid,rt<<1

#define rson mid+1,r,(rt<<1)+1

#define clr(x,y) memset((x),y,sizeof(x))

#define ****(x) cerr << #x << "=" << x << endl

using namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

int seed =

131;

const

int maxn =

1e5+5;

const

int mod =

1e9+7;

int t;

intmain()

if(!ans)

printf

("bob\n");

else

printf

("alice\n");

}return0;

}

hdu 3389 Game(階梯博弈)

1 3 4號盒子是最終狀態,所有出始狀態都會經過若干步操作變成這個最終狀態。如果仔細分析,會發現 n 6 0 或 2 或 5的盒子,經過奇數步轉移到1 3 4中去,其他的則須經過偶數步才能轉移過去。易證 偶數步的不用管,對於奇數步的操作只需轉換成nim博弈,利用異或運算判斷是否必勝即可。includ...

HDU 3389 階梯博弈變形

n堆石子,每次選取兩堆a b,a b 2 1 a b 3 a b,不能操作者輸 選石子堆為奇數的等價於選取步數為奇數的,觀察發現 1 3 4 是無法再移動的 步數為0,然後發現以6為週期,取模就好了 date 2017 10 14 19 18 00 filename hdu 3389 基礎階梯博弈變...

Game HDU 3389 (階梯博弈)

題目 題意1 n帶編號的盒子,當編號滿足a b a非空 a b 3 0 a b 2 1則可以從a中取任意卡片到b中,誰不能取了誰就輸。思路階梯博弈 階梯博弈等效為奇數號階梯的尼姆博弈。假設我們是先手。我們按照尼姆博弈的原則進行第一次移動。如果對方移動奇數號階梯的石子,我們繼續按照尼姆博弈的原則移動。...