給定一張
n 個點
m條邊的有向無環圖,每條邊有顏色ci
。圖上有
q 顆石子,每顆石子一開始在乙個點上。
兩個人輪流在圖上進行操作。每次操作時,選擇乙個有出邊(「下棋」一題沒有這個限制)且點上有石子的點
x,從點上取走乙個石子,然後選擇乙個顏色集合
s (可以為空),如果
x的某條出邊的顏色屬於該集合,則在該邊的終點上放上一顆石子。不能操作者輸。
請問先手是否存在必勝策略。n≤
200,m≤
5000,q
≤105,
ci≤5000
可以發現每個石子其實看成乙個單獨的遊戲。
考慮如何計算乙個石子的sg
函式值。 sg
(x)=
mexs
⊆s這個怎麼算呢?我們把同顏色的邊先異或起來,然後對這些數求線性基,假設
i 是最小的線性相關的位(線性基該位為
0),那麼答案顯然就是2i
。 然後就可以用bitset瞎壓一下位來做了。
注意,如果必須選擇有出邊的點的話,乙個沒有出邊的點sg
值應該是
0 ,如果沒有這個限制就是1。
#include
#include
#include
#include
using
namespace
std;
int read()
const
int n=205;
const
int m=5005;
const
int c=5005;
typedef
bitset
b;b base[n],sg[n],cbit[c],ans;
int nxt[m],tov[m],col[m];
bool vis[n];
int last[n];
int used[c];
int ext[c];
int n,m,tot,q;
void insert(int x,int y,int z)
void dfs(int x)
for (int i=0;i<=n;i++) base[i].reset();
for (int i=1;i<=ext[0];++i)
}for (int i=0;i<=n;++i)
if (base[i].none())
}int main()
JZOJ 規律 遊戲
有一堆金塊,king和貓老大輪流抽金塊,每次抽的個數必然是2的次方冪,求勝利 抽走最後一塊 的是誰 三行每行乙個數 n 0對於每局,如果 king 必勝則輸出一行 king will win.否則第一行輸出 maolaoda willwin.第二行輸出他第一次拿的最小數量。8 42maolaoda ...
jzoj遊戲 規律 數論
description king 很喜歡賭博,這次 king邀請貓老大來玩乙個遊戲。king 拿出了 n 塊 0 input 三行每行乙個數 n 0 output 對於每局,如果 king 必勝則輸出一行 king will win.否則第一行輸出 maolaoda willwin.第二行輸出他第一...
JZOJ 數字遊戲 DP
小w發明了乙個遊戲,他在黑板上寫出了一行數字a1,a2,a3,an,然後給你m個回合的機會,每回合你可以從中選擇乙個數字擦去它,接著剩下來的每個數字ai都要遞減乙個值bi,即a1減掉b1,a2減掉b2,如此重複m個回合,所有你擦去的數字之和就是你所得的分數。小w和他的好朋友小y玩了這個遊戲,可是他發...