oj位址
小明經常玩 lol 遊戲上癮,一次他想挑戰k大師,不料k大師說:
「我們先來玩個空格填字母的遊戲,要是你不能贏我,就再別玩lol了」。
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
簡單的博弈類問題,寫出來不難,但是好像藍橋杯對執行時間卡的挺嚴的。看一下最後ac的結果
一開始也用了記憶化搜尋了,但是只給了60分,剩下兩個測試點都是超時,後來看見乙個人寫的**,仔細比對,邏輯上沒有問題,但是我的就是超時,一點點修改,發現了問題,一開始我的程式如下:
#include
using
namespace std;
mapint> vis;
string sc;
intgame
(string sc)
if(sc.
find
("lol")!=
-1)if
(sc.
find
("*")==
-1)bool ping =
false
;for
(unsigned
int i =
0; i < sc.
size()
;i++
)else
if(f ==0)
tmp[i]
='o'
; f =
game
(tmp);if
(f ==-1
)else
if(f ==0)
}}if(ping)
return vis[sc]=-
1;}int
main()
return0;
}
和人家的進行比對,發現相差的一點就是,我的dfs函式的引數string sc這個字串,他放在了全域性變數的位置,我試了一下,果真!在全域性變數中就ac了,最後的ac**在下邊。貌似全域性變數的操作比引數效率要高?
#include
using
namespace std;
mapint> vis;
string sc;
intgame()
if(sc.
find
("lol")!=
-1)if
(sc.
find
("*")==
-1)bool ping =
false
;for
(unsigned
int i =
0; i < sc.
size()
;i++
)else
if(f ==0)
sc[i]
='o'
; f =
game()
; sc[i]
='*';if
(f ==-1
)else
if(f ==0)
}}if(ping)
return vis[sc]=-
1;}int
main()
return0;
}
藍橋杯 歷屆試題 填字母遊戲
傳送門 問題描述 小明經常玩 lol 遊戲上癮,一次他想挑戰k大師,不料k大師說 我們先來玩個空格填字母的遊戲,要是你不能贏我,就再別玩lol了 k大師在紙上畫了一行n個格仔,要小明和他交替往其中填入字母。並且 1.輪到某人填的時候,只能在某個空格中填入l或o 2.誰先讓字母組成了 lol 的字樣,...
藍橋杯 填字母
題目 輪到某人填的時候,只能在某個空格中填入l或o 誰先讓字母組成了 lol 的字樣,誰獲勝。如果所有格仔都填滿了,仍無法組成lol,則平局。小明試驗了幾次都輸了,他很慚愧,希望你能用計算機幫他解開這個謎。本題的輸入格式為 第一行,數字n n 10 表示下面有n個初始局面。接下來,n行,每行乙個串,...
藍橋杯 歷屆試題 填字母遊戲 記憶化搜尋
小明經常玩 lol 遊戲上癮,一次他想挑戰k大師,不料k大師說 我們先來玩個空格填字母的遊戲,要是你不能贏我,就再別玩lol了 k大師在紙上畫了一行n個格仔,要小明和他交替往其中填入字母。並且 1.1.1.輪到某人填的時候,只能在某個空格中填入l或o 2.2.2.誰先讓字母組成了 lol 的字樣,誰...