藍橋杯 填字母遊戲(無偏博弈類問題)

2022-07-15 06:48:09 字數 1354 閱讀 8000

k大師在紙上畫了一行n個格仔,要小明和他交替往其中填入字母。

1. 輪到某人填的時候,只能在某個空格中填入l或o

2. 誰先讓字母組成了「lol」的字樣,誰獲勝。

3. 如果所有格仔都填滿了,仍無法組成lol,則平局。

小明試驗了幾次都輸了,他很慚愧,希望你能用計算機幫他解開這個謎。

本題的輸入格式為:

第一行,數字n(n

<10

),表示下面有n個初始局面。

接下來,n行,每行乙個串,表示開始的局面。

比如:「******」, 表示有6個空格。「l****」, 表示左邊是乙個字母l,它的右邊是4個空格。

要求輸出n個數字,表示對每個局面,如果小明先填,當k大師總是用最強著法的時候,小明的最好結果。

1表示能贏

-1表示必輸

0 表示可以逼平

4

***l**l

l**l***l

l*****l

0-11

1

首先,對於此問題,我們要明白,它是有偏博弈,還是無偏博弈。

無偏博弈:在組合博弈論裡,無偏博弈是一類任意局勢對於遊戲雙方都是平等的回合制雙人遊戲。這裡平等的意思是所有可行的走法僅僅依賴於當前的局勢,而與現在正要行動的是哪一方無關。換句話說,兩個遊戲者除了先後手之外毫無區別。

有偏博弈:除無偏博弈外,其餘博弈皆為有偏博弈

當填入乙個字母時,我們要考慮兩個問題,一是是否形成了lol這個字串,二是是否還存在空格,如果是第一種情況,則說明對方輸了,我方贏了,如果不存在空格了,說明將有可能平局,因此,問題就簡化為對每乙個要填的空,做上述的判斷,形成了乙個遞迴。

/*

lol填字遊戲

我方先填

*/#include

#include

#include

using

namespace

std;

int is_lol(string

x);

intmain()

int is_lol(string

x) x[i]='o'

;

switch

(is_lol(x))

x[i]='*'

; }

}if(ping) return

0;//

如果存在平局,則結果為平局,否則即輸

return -1

;}

藍橋杯 PREV 46 填字母遊戲(博弈)

prev 46 填字母遊戲 思路 此題博弈的思想就是每個人尋找自己每一步的最優解,我們用dfs模擬博弈過程 int dfs 返回某方此步驟的最優解,遍歷所有空格,模擬所有可能然後取裡面最優的乙個作為函式返回值 在遊戲結束之前每個人每個步驟填乙個空格然後遞迴地將剩下的局面交給對方 為了減少複雜度我們採...

藍橋杯 歷屆試題 填字母遊戲

傳送門 問題描述 小明經常玩 lol 遊戲上癮,一次他想挑戰k大師,不料k大師說 我們先來玩個空格填字母的遊戲,要是你不能贏我,就再別玩lol了 k大師在紙上畫了一行n個格仔,要小明和他交替往其中填入字母。並且 1.輪到某人填的時候,只能在某個空格中填入l或o 2.誰先讓字母組成了 lol 的字樣,...

DFS 藍橋杯試題 填字母遊戲

oj位址 小明經常玩 lol 遊戲上癮,一次他想挑戰k大師,不料k大師說 我們先來玩個空格填字母的遊戲,要是你不能贏我,就再別玩lol了 k大師在紙上畫了一行n個格仔,要小明和他交替往其中填入字母。並且 1.輪到某人填的時候,只能在某個空格中填入l或o 2.誰先讓字母組成了 lol 的字樣,誰獲勝。...