暑假集訓日記 8 5(博弈)

2021-09-25 21:27:30 字數 3192 閱讀 2985

這是一篇沒有看完的部落格

「 im

part

ialc

ombi

nato

rial

game

s」(以

下簡稱i

cg)。

「impartial combinatorial games」(以下簡稱icg)。

「impar

tial

comb

inat

oria

lgam

es」(

以下簡稱

icg)

。滿足以下條件的遊戲是icg

icgic

g:1、有兩名選手;

2、兩名選手交替對遊戲進行移動(mov

emove

move

),每次一步,選手可以在(一般而言)有限的合法移動集合中任選一種進行移動;

3、對於遊戲的任何一種可能的局面,合法的移動集合只取決於這個局面本身,不取決於輪到哪名選手操作、以前的任何操作、骰子的點數或者其它什麼因素; 4、如果輪到某名選手移動,且這個局面的合法的移動集合為空(也就是說此時無法進行移動),則這名選手負。

根據這個定義,很多日常的遊戲並非icg

icgic

g。例如象棋就不滿足條件3,因為紅方只能移動紅子,黑方只能移動黑子,合法的移動集合取決於輪到哪名選手操作。

定 義p

−pos

itio

n和n−

posi

tion

定義p-position和n-position

定義p−po

siti

on和n

−pos

itio

n:其中p

pp代表pre

viou

sprevious

previo

us,n

nn代表nex

tnext

next

,直觀的說,上一次mov

emove

move

的人有必勝策略的局面是p−p

osit

io

np-position

p−posi

tion

,也就是「後手可保證必勝」或者「先手必敗」,現在輪到mov

emove

move

的人有必勝策略的局面是n−p

osit

io

nn-position

n−posi

tion

,也就是「先手可保證必勝」。

更嚴謹的定義是:

1.無法進行任何移動的局面(也就是ter

mina

lpos

itio

nterminal position

termin

alpo

siti

on)是p −p

osit

io

np-position

p−posi

tion

;2.可以移動到p−p

osit

io

np-position

p−posi

tion

的局面是n−p

osit

io

nn-position

n−posi

tion

;3.所有移動都導致n−p

osit

io

nn-position

n−posi

tion

的局面是p−p

osit

io

np-position

p−posi

tion

。法一:sg打表找規律

#include

using namespace std;

const

int n=

1e6+10;

///打表

///f:可以取走的石子個數

///sg:0~n的sg函式值

///hash:mex{}

int f[n]

,sg[n]

,hash[n]

;void

getsg

(int n,

int m)

中未出現的最小的非負整數}}

}///如果有多堆,則

/// num=sg[n1]^sg[n2]^sg[n3]^....^sg[nx];

/// if(num==0) 則先手必敗

intmain()

getsg

(n,m)

;for

(int i=

0;i<=n;

++i)

printf

("%d %d\n"

,i,sg[i]);

}

法二:dfs

dfsdf

s版打表

#include

using namespace std;

const

int n=

1e6+10;

///dfs

///注意 s陣列要按從小到大排序 sg函式要初始化為-1 對於每個集合只需初始化1遍

///n是集合s的大小 s[i]是定義的特殊取法規則的陣列

int s[

110]

,sg[

10010

],n;

intsg_dfs

(int x)

}int e;

for(i=0;

;i++)if

(!vis[i]

)return sg[x]

=e;}

///如果有多堆,則

/// num=sg[n1]^sg[n2]^sg[n3]^....^sg[nx];

/// if(num==0) 則先手必敗

intmain()

sg_dfs

(m);

for(

int i=

0;i<=m;

++i)

printf

("%d %d\n"

,i,sg[i]);

}

kmp

演算法

:kmp演算法:

kmp演算法:

kmp演算法模板

暑假集訓(8 5)

學習內容 並查集 樹狀陣列 多校 今日完成題數 不包含多校 4 多校補題情況 之前定的每支隊伍標準 今日看書情況 12頁 今日做題總結 acwing241 acwing240 permutation 2 acwing 239 總結 每個題都應該用自己手動模擬,不斷的推,就算只是推樣例,在這個過程中,...

暑假集訓 8 5總結

學習內容 白書 cf 今日完成題數 不包含多校 4 多校補題情況 無多校 今日看書情況 15頁 學習演算法的總結 lucky string 微軟校招 codeforces round 577 div.2 c.maximum median codeforces round 577 div.2 b.ze...

暑假集訓日記Day xx

6.23 今天算是第一天吧 畢竟昨天被迫做了半天苦力 充實而豐滿的一天 上午做題 下午講題 晚上改錯 考試是原題和我會做有什麼關係嗎 早起跑操還闊以 比之前距離短就很快樂 然後練了會兒 就去吃早飯了 我好像飯量小了!晚上發現然並卵 上午就是考試唄 考試有啥好說的 考試沒啥好說的 那我在幹嘛呢 你在懷...