【問題描述】
hy 抄題解又被老師抓住了,現在老師把他叫到了辦公室。 老師要 hy 和他玩乙個遊
戲。如果 hy 輸了,老師就要把他開除資訊組;
遊戲分為 k 輪。在遊戲開始之前,老師會將 n 個由英文本母組成的字串放入箱子。
每局開始,字串為空串,然後兩人輪流在末尾追加字元,保證新的字串為箱子中某
字串的字首,直到有乙個人不能操作,不能操作的那個人就輸掉當前的一輪。新一輪
由上一句輸的人先手。最後一局贏的人獲勝。
假定老師和 hy 都能採取最優的策略,且老師為了彰顯自己的大度讓 hy 先手,求 hy 能否
獲勝。【輸入格式】
輸入包括多組資料,輸入以文字流結尾(eof)為結束。
每組資料的第一行包含兩個整數 n, k,分別表示放入箱子字串的數量和遊戲的輪
數。接下來 n 行,每行乙個字串表示由英文本母組成的句子。
【輸出格式】
每組資料第一行,輸出 hy 是否能贏,若能贏輸出」hy wins!「,否則輸出」teacher
wins!」。
【樣例輸入 1】
2 3a
b3 1ab
c【樣例輸出 1】
hy wins!
hy wins!
【樣例輸入 2】
1 2ab
【樣例輸出 2】
teacher wins!【評測用例規模與約定】
對於 40%的評測用例,1≤n≤10,1≤k≤10 4 ;
對於 100%的評測用例,1≤n≤10 5 ,1≤k≤10 9 ,保證所有字串總長度不超過 10 5 ,資料組
數不超過 10
先把所有的字串插入 trie 樹,然後就是博弈論了。
博弈論分為三種情況:
1.若先手無必勝策略即先手必敗則先手一直先手,最後一局後手勝;
2.若先手有必勝策略則下一局成後手,即為勝敗交替,此時,最後一句的勝敗決定於 k 的奇
偶性;3.先手有必勝策略有必敗策略,則先手前 k-1 局敗,最後一局先手勝。
考慮 \(dp\) 轉移 ,\(f[i]\) 代表當前節點是否能肯定贏,\(f[i]\) 代表當前節點是否能肯定輸。
然後按部就班轉移即可。
#include#define n 100001
#define ll long long
using namespace std;
int ch[n][26],cnt;
void insert(string s)
dfs(0,0,0);
if(pd[0]!=1)
if(pd[0]==1&&pd[0]==0)
if(pd[0]==1&&pd[0]==1)
cout<<"hy wins!"<} return 0;
}
字串遊戲 博弈論 trie
從前有個遊戲。遊戲分為 k 輪。給定乙個由小寫英文本母組成的字串的集合 s,在每輪遊戲開始時,雙方會得到乙個空的字串,然後兩人輪流在該串的末尾新增字元,並且需要保證新的字串是 s 中某個串的字首,直到有一方不能操作,則不能操作的一方輸掉這一輪。新的一輪由上一輪輸的人先手,最後一輪贏的人獲得遊戲勝利。...
《博弈論的詭計》
吠犬不咬人 對這個世界的最好描述可能只有其本身。囚徒困境 下下人有上上之智。根據情況可列寫博弈收益矩陣,太精明往往會壞事哦,精明不等於高明哦。重複博弈 在車站這樣人群流動性大的地方,不但商品和服務質量差,而且假貨橫行。對未來的預期是我們行為的重要因素。每一次的人際交往其實都可以簡化為兩種基本選擇 合...
python博弈論 博弈論(七) 隱藏的投票權重
博弈論 七 隱藏的投票權重 收錄於話題 博弈論 8個產品經理萬萬沒有料到,因為自己的一筆感謝費,後端和研究員打了起來。事情是這樣的,x3專案開發完成。在這個專案上,後端投入了30天,研究員投入了50天。這個專案本來是沒有產品經理的,但是由於公司報專案需要填寫產品經理,所以就把她填了上去。沒想到x3專...