博弈問題方法單 找規律篇

2021-08-13 22:36:23 字數 2600 閱讀 5241

[vijos1196] 吃糖果遊戲

一開始看看感覺還可以用【科學的】二維sg,一看資料,10000位,exm?

於是我先寫了個sg函式,敲進去幾個資料

啊我好像看到規律了!—> ac

嘛這樣打表是不行的,我們還是看個正解吧

當遊戲狀態屬於前者時,matrix67可以把糖果數被5除餘1、4或正好除盡的那一堆分成糖果數被5除餘數都是2或3的兩堆(他總能做到這一點)

而對方不得不把其中一堆糖果又分出新的糖果數被5除餘1、4或正好除盡的一堆留給matrix67操作。

這樣逼著對方總是面臨必敗的狀態,使得最後對方不得不把2個糖果或者3個糖果分成兩堆,

從而使matrix67贏得遊戲。

反過來,當matrix67面臨兩堆糖果的數目被5除餘數都是2或3的狀態時,shadow總可以取勝。

所以就是如果兩堆的個數的個位數都是2 3 7 8的乙個的話

就是shadow取勝,不然就是matrix

暴力【表】

#include 

#include

#include

using

namespace

std;

int sg[1005][1005],n,m;

int get_sg(int x,int y)

bool ext[1005];memset(ext,0,sizeof(ext));

for (int i=1;i+i<=y;i++)

ext[get_sg(i,y-i)]=1;

for (int i=1;i+i<=x;i++)

ext[get_sg(i,x-i)]=1;

for (int i=0;;i++)

if (!ext[i])

return sg[x][y];

}int main()

}

ac

#include 

#include

using

namespace

std;

char x[10005],y[10005];

int main()

}

[poj2505] a multiplication game

首先想到打表,但這什麼鬼啊我不會啊!那就硬找規律?

容易發現

[1,9]stan

[10,18]ollie

[19,162]stan

… 我們可以這樣極限考慮,要是stan知道ta會贏,那每回合會選最大的9,ollie知道自己乘上也沒什麼用,給ta個最小的2,然後stan選個9就能達到自己的目標,ollie要是贏的話是同樣的

然後你隨便試試19-162之間的數就發現ollie總是不能贏,就可以發現規律了

1~9*1 stan

9*1+1~9*2 ollie

9*2+1~9*2*9 stan

那麼我們往下推測

9*2*9+1~9*2*9*2 ollie

規律get?

其實還有乙個問題是這個數字很大,但是可以用double讀入

#include 

#include

using

namespace

std;

double n;

int main()

if (n<=18)

n/=18;}}

}

[hdu3032] nim or not nim?

alice和bob輪流取石子,每一次可以從任意一堆中拿走任意個石子,也可以將一堆石子分為兩個小堆。先拿完者獲勝。

這個問題可以用sg函式來解決。首先,操作①其實和nim遊戲沒什麼區別,對於乙個石子數為k的點來說,後繼可以為0…k-1。而操作②實際上是把乙個遊戲分成了兩個遊戲。根據遊戲的和的概念,這兩個遊戲的和應該為兩個子遊戲的sg函式值的異或。

比如說,狀態3的後繼有:0、1、2、(1,2),他們的sg值分別為0、1、2、3,所以sg(3) = 4

但是一看資料範圍2^31 - 1。。。然後打了個表,規律get?

#include 

#include

using

namespace

std;

int sg[10005];

int get_sg(int x)

return sg[x];

}int find_sg(int x)

int main()

if (k) printf("alice\n");else

printf("bob\n");

}}

[bzoj2463] [中山市選2009] 誰能贏呢?

這題什麼鬼啊,我為什麼連暴力都不會啊?

然後畫了幾個格仔試一試,發現早晚他們都會把整個棋盤走一遍,那不就是看這個棋盤格仔的奇偶嗎。。

再退一步,這不就是看行數的奇偶嗎。。

ac。

#include 

using

namespace

std;

int main()

}

找規律博弈小記(更新)

最近在hdoj上水博弈的題目,在這裡記錄一些小規律。1 題意 一堆n個石子,每次最多取q個,最少取p個,切最後不少於p個時必須一次性取完。誰後取完者輸。ps 那麼就是誰先取到剩p個時候就贏了,少於p個的話一定輸,因為必須取完,如果誰當前遇到0個,贏,大於p小於p q個是贏,因為先手總是可以想辦法給後...

找規律類博弈(3)

盒子遊戲 描述 有兩個相同的盒子,其中乙個裝了 n 個球,另乙個裝了乙個球。alice 和 bob 發明了乙個遊戲,規則如下 alice 和 bob 輪流操作,alice 先操作。每次操作時,遊戲者先看看哪個盒子裡的球的數目比較少,然後清空這個盒子 盒子裡的球直接扔掉 然後把另乙個盒子裡的球拿一些到...

hdu1564博弈 找規律

include include include include include include include include include include include include include define pi acos 1 define ll long long define mo...