博弈 自殺遊戲 2018 小白月賽 7

2021-08-28 03:58:46 字數 1110 閱讀 7521

b 自殺遊戲

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

題目描述

alice和bob產生了不可調節的矛盾,於是他們相約一起玩乙個自殺遊戲,輸的人就會從這個世界上消失。 遊戲開始時,alice手上拿著乙個定時炸彈,炸彈有個倒計時t。炸彈在t=0時刻會**,此時手上拿著炸彈的人會從這個世界上消失。為了增加遊戲樂趣,他們約定每個人拿到炸彈後可以選擇將炸彈的時間調快d秒(d ∈ [a,b]),或者不調。每次交換炸彈會消耗1秒(假設調節炸彈時間不需要消耗時間)。 問題來了,如果雙方都足夠聰明,誰會活下去呢?

輸入描述:

第一行有三個整數t,a,b,分別表示炸彈初始時刻的倒計時,可調節時間的範圍。(0 ≤ t ≤ 105,1 ≤ a ≤ b ≤ 10)

輸出描述:

若alice存活則輸出"alice",若bob存活則輸出"bob"。

示例1輸入

6 3 4

輸出alice

說明alice只需要將炸彈調快3秒後再給bob,bob就會拿到乙個2秒後**的炸彈。

f[0]為必敗狀態 f[i-1]==0 必然 f[i]是必勝狀態

當f[i-1]==1 時 看f[i-1-b]到f[i-1-b] 狀態有沒有必敗狀態 就可以認定f[i]是必勝狀態

// 博弈真的很神奇 orz

官方題解:

將必勝態和必敗態的轉移用 dp 遞推或者記憶化搜尋出來即可。 乙個必敗態的後繼狀態全部是必勝態,乙個必勝態的後繼存在比敗態

#include #include #include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 1e5+5;

int n,m,t,k,a,b;

int f[maxn];

int main()}}

} if(f[t]) cout<<"alice\n";

else cout<<"bob\n";

} return 0;

}

牛客小白月賽3 C 博弈

傳送門 題目描述 xhrlyb在和cwbc玩遊戲。在乙個多重集合中有在 l,r 中的全部整數各乙個,即l,l 1,l 2,r。每次xhrlyb和cwbc可以選擇乙個大於0的數字p,把p從多重集合中刪去,然後向集合中加入k個 輸入描述 輸入資料有多行,每行有三個正整數,l,r,k。輸出描述 輸出資料應...

牛客小白月賽 黑黑白白(博弈)

只要子兒子存在乙個p,那麼當前這個節點就為n,反之如果兒子全部都是n,那麼當前節點就為p,dfs就可以解決,我在初始化vector的時候少打了乙個 wa兩次,還是太粗心 include include include include include include define ll long lo...

數字方陣 2018牛客網小白月賽2 題A

數字方陣 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k special judge,64bit io format lld 不一樣。他想要更多的方陣,但他再寫不出來了。於是他 跑來找你,請你給他乙個邊長為 輸入共一行,乙個整數 意義同題面描述。輸出共...