這是突然看到的乙個非常有意思的題,是acm-icpc的原題,在這裡稍微做一些分析,希望對大家有幫助。
王子m
和公主hff
相愛,想要娶公主。雖然公主非常願意,但是並不是王國裡每個人都支援這一場婚姻。而為了娶到公主,王子需要完成乙個挑戰:在n個房間中找出公主在哪。
每個房間有乙個人,他們彼此知道誰在哪個房間。可以每次問任意乙個房間裡的人三種問題之一:
1、你的名字是什麼?
2、在第xx個房間裡的人的名字是什麼?
3、公主在哪個房間?
這n個人可以分為三類:一類支援婚姻,一定說真話;一類反對婚姻,一定說假話;一類立場不確定,可能說真話可能說假話。
王子知道這三類人的人數分別為 a,b,c,求能否通過問若干個問題保證找到公主在哪,如果能,輸出yes
和最少需要的問題數;如果不能,輸出no
。
時間限制:1000ms,記憶體限制:65536kb
第一行乙個整數n表示資料組數
接下來n行,每行3個整數a,b,c
資料範圍:1≤a≤10000,0≤b≤10000,0≤c≤10000
對於每組資料:
若能問到公主在哪,輸出兩行:第一行為:yes
,第二行輸出乙個整數表示答案。
若不能,輸出一行:no
2
1 2 0
2 0 0
no
yes1
#include
intmain()
else
if(a>b+c)
else
}return0;
}
因為我們分析的是最壞的情況,所以,最壞情況下,c對應的所有人都說假話即可,然後我們再考慮下面這種情況:只有兩個人,乙個說真話,乙個說假話。大家可以自行分析一下,可以發現這是無法得到公主在哪個房間的,並且通過這裡,我們可以知道,其實只有第三個問題是有價值的,所以在說真話和說假話的人數相同的時候,我們是推不出來的,所以我們可以直接推廣到a<=b+c
的情況是無法推出來的,所以我們只用考慮a>b+c
即可。因為王子是知道a、b、c所對應的人的數目的,所以a>b+c
是肯定能推出來的,只用問第三個問題即可,找出答案中數目最多的房間即公主所在房間,那麼需要問的次數則是2\*b+2\*c+1
,為什麼呢,因為b和c是必須要問完的,然後在a中問比b+c多乙個問題就可以得到答案了。然後是特殊情況的分析,即a=1,b=0,c=0的情況,是不用問就能知道的。
無
Prince and Princess 動態規劃
題目大意 求兩個序列的最長子序列 include include include includeusing namespace std int n,p,q const int maxn 250 250 int num1 maxn int hash maxn stack maxn int main i...
nginx resin session問題解決
nginx resin 負載均衡 和防止其中一台宕機出現不可以 出現的問題 在使用者登入 時會出現兩台伺服器session不一致,一台有儲存,另一台沒儲存。解決方案 利用nginx upstream jvm route 解決 他不是共享,也不是同步,而是通過 cookie session來判別 到這...
Presentation Error問題解決
前兩天考試提交 出現了個presentation error,沒在意,以為 錯誤。今天做題時又不斷出現presentation error,上網查了查。具體原因以及改正方案如下 首先可以肯定的是,思路沒有錯,輸出結果也與標準輸出結果非!常!接!近!出現這個錯誤最可能的原因是,在輸出結果的後面,多了或...