BZOJ 4550 小奇的博弈 knim 揹包

2022-09-10 00:06:24 字數 1096 閱讀 2862

%%% hzwer,感覺博弈裡面的各種結論好多好自閉啊orztime limit: 2 sec memory limit: 256 mb

submit: 207 solved: 126

[submit][status][discuss]這個遊戲是在乙個1*n的棋盤上進行的,棋盤上有k個棋子,一半是黑色,一半是白色。最左邊是白色棋子,最右邊

是黑色棋子,相鄰的棋子顏色不同。

小奇可以移動白色棋子,提比可以移動黑色的棋子,它們每次操作可以移動1到d個棋子。每當移動某乙個棋子時,

這個棋子不能跨越兩邊的棋子,當然也不可以出界。當誰不可以操作時,誰就失敗了。小奇和提比輪流操作,現在

小奇先移動,有多少種初始棋子的布局會使它有必勝策略?共一行,三個數,n,k,d。對於100%的資料,有1<=d<=k<=n<=10000, k為偶數,k<=100。輸出小奇勝利的方案總數。答案對1000000007取模。10 4 2182by hzwer

我們發現對於白棋子如果往左移動一定會使自己更容易陷入死局,黑棋右移同理,所以預設白棋向右,黑棋向左,這樣我們發現我們就分出了k/2堆石子,就是每次選擇1-d堆石子的nim遊戲.

對於knim遊戲,有乙個結論就是對於每一堆石子的sg的和的每乙個二進位制位上的總和都為d+1的倍數.考慮特殊的1nim遊戲(即多堆,每次只能拿一堆),異或就是不進製%2.

轉換模型之後揹包f[i][x]表示二進位制列舉到i,用x顆石子的方案數.由於對於每堆上面的乙個二進位制只能填0/1,轉移套個組合數表示將這些(1const int mod = 1e9+7;

const int maxn = 1e4+5;

int add(int x,int y)

int sub(int x,int y)

int mul(int x,int y)

int ksm(int a,int b)

int n,k,d;

int fac[maxn],inv[maxn];

int gc(int x,int y) }}

int ans = 0;

for(int i=0;i<=n-k;i++)

printf("%d",sub(gc(n,k),ans));

}

bzoj4550 小奇的博弈

這個遊戲是在乙個1 n的棋盤上進行的,棋盤上有k個棋子,一半是黑色,一半是白色。最左邊是白色棋子,最右邊是黑色棋子,相鄰的棋子顏色不同。小奇可以移動白色棋子,提比可以移動黑色的棋子,它們每次操作可以移動1到d個棋子。每當移動某乙個棋子時,這個棋子不能跨越兩邊的棋子,當然也不可以出界。當誰不可以操作時...

BZOJ 4548 小奇的糖果

有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾 起多少糖果,使得獲得的糖果並不包含所有的顏色。包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n k,分別表示點數和...

BZOJ4547 小奇的集合

有乙個大小為n的可重集s,小奇每次操作可以加入乙個數a b a,b均屬於s 求k次操作後它可獲得的s的和的最大值。資料保證這個值為非負數 很顯然,我們每次肯定是取集合中最大的兩個數,那麼我們設這兩個數為 a b,當前的和為 s 顯然有轉移 a b,b a b,s a b s,那麼用矩陣乘法加速即可。...