A . The Hardest Problem Ever
PKU 1298 http://poj.org/problem?id=1298
題意:解碼題,按照如下對(duì)應(yīng)關(guān)系解碼:
密文 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文 V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
題解:簡(jiǎn)單題。
B. Polar Explorer
PKU 1299 http://poj.org/problem?id=1299
題意:給定圓的半徑X,求圓周上兩個(gè)點(diǎn)A和B的距離,其中圓心角AOB的角度為Z(0 <= Z <= 360)。
題解:核心是Z如果大于180,則Z = 360 - Z,即走劣弧。而且題目求的是來(lái)回一次,所以計(jì)算的時(shí)候弧長(zhǎng)要乘2。
C. Door Man
PKU 1300 http://poj.org/problem?id=1300
題意:給定一些邊和起點(diǎn)s,求能否找到一條從s到0的通路,并且要求訪問(wèn)所有的邊。
題解:歐拉回路可行解判定。
首先利用flood fill從s遍歷全圖,如果0點(diǎn)沒(méi)有被訪問(wèn)到則必定不存在;然后判斷度數(shù)不為0的點(diǎn)是否有未被訪問(wèn)到的,如果有,說(shuō)明圖不連通,也必定不存在解;最后統(tǒng)計(jì)度數(shù)為奇數(shù)的點(diǎn)的個(gè)數(shù)P,以及具體的點(diǎn):
1) P = 0,則必定有解;
2) P > 2,則無(wú)解;
3) P =2, 那么有解的前提是兩個(gè)奇度數(shù)點(diǎn)中一個(gè)是s,另一個(gè)是0;否則無(wú)解。
D . The Umbrella Problem 2054
PKU 1301 http://poj.org/problem?id=1301
題意:給定一個(gè)10X10的地圖,玩家從第一行的某一個(gè)點(diǎn)出發(fā),每一步行編號(hào)+1,列編號(hào)增量有三種選擇(-1, 0, 1),圖中標(biāo)記為S(laser gun)的點(diǎn)不能走,并且S的點(diǎn)會(huì)發(fā)出鐳射光,第0秒朝上發(fā)射,第1秒朝右,第2秒朝下,第3秒朝左,循環(huán)往復(fù),發(fā)射長(zhǎng)度一直到地圖邊緣。問(wèn)能否走到最后一行標(biāo)記為G(grass)的地方。
題解:廣搜。
hash[4][R][C]表示狀態(tài),每走一步,利用步數(shù) mod 4計(jì)算出鐳射光的方向,然后將所有的鐳射光可達(dá)區(qū)域全部標(biāo)記出來(lái),未標(biāo)記的點(diǎn)為可達(dá)點(diǎn),枚舉三個(gè)方向進(jìn)行搜索。
E. Blue Gene, Jr.
PKU 1302 http://poj.org/problem?id=1302
題意:一個(gè)長(zhǎng)度為N(N <= 20)的病毒基因串A[1...N]進(jìn)行變異,變異過(guò)程從左往右,分情況討論:
1) 如果第i個(gè)字符是 A-Z,則它將變異成數(shù)字n mod 10,n表示A[i+1...N]中變異基因的數(shù)目;
2) 如果第i個(gè)字符是 1-9,則它變異成A[i] - 1,并且如果第p (p = i + A[i])個(gè)基因存在的話,從第p個(gè)基因開始變異;否則從第i+1個(gè)基因開始變異;
題解:題意理解后就是個(gè)水題了,遞歸求解。
F . Byte Me!
PKU 1303 http://poj.org/problem?id=1303
題意:二進(jìn)制二十一點(diǎn)(二進(jìn)制黑杰克)是由兩種牌組成的游戲,一種稱為bytes(一個(gè)8比特的序列表示0-255之間的數(shù)),一種稱為nibbles((一個(gè)4比特的序列表示0-15之間的數(shù)),游戲玩法如下:
1) 游戲的目標(biāo)是獲得盡量接近510分,并且不能超過(guò)它;
2) 每個(gè)玩家有兩張牌,一張面朝上,一張面朝下(莊家不知道是什么牌);
3) 每個(gè)玩家有四次叫牌機(jī)會(huì),可以叫bytes,也可以叫nibbles,但是如果分?jǐn)?shù)超過(guò)510則不能再叫牌;
4) 所有的叫牌都是面朝上的;
5) 如果玩家分?jǐn)?shù)超過(guò)510,立即判為輸;
5) 莊家最后一個(gè)叫牌;
7) 平局的情況莊家勝(如果所有人都超過(guò)510分,莊家還是贏的);
莊家的規(guī)則如下:
1) 當(dāng)看到自己和其他人面朝上的牌,判斷已經(jīng)必勝時(shí)不要再叫牌了;
2) 如果總分小于382時(shí) 需要叫一次byte牌;
3) 如果總分小于等于500時(shí) 需要叫一次nibble牌;
還有兩個(gè)隱藏規(guī)則:
1) 你是莊家;
2) 每個(gè)非莊家的玩家面朝下的牌是11111111(但是莊家不知道),面朝上的牌給定;
3) 非莊家不會(huì)叫牌(因?yàn)樗麄儽容^笨);
給定莊家的牌和其他玩家面朝上的牌,以及牌堆中的bytes牌和nibble牌,求莊家的四次叫牌能否獲勝;
題解:題目說(shuō)了一大堆,最后非莊家的玩家都不會(huì)叫牌,o(╯□╰)o...所以只要根據(jù)莊家的規(guī)則進(jìn)行叫牌,然后判斷是否能夠勝出即可;
因?yàn)槠渌硕疾唤信疲總€(gè)人都有兩張牌,所以其他人的總分不可能超過(guò)510分,所以,如果莊家叫牌超過(guò)510分直接被判為負(fù)。
每次叫牌前先判斷所有玩家的朝上的卡片分?jǐn)?shù)加上255和莊家當(dāng)前得分進(jìn)行比較,如果有一個(gè)玩家分?jǐn)?shù)大于莊家分?jǐn)?shù),則莊家按照382和500這兩個(gè)區(qū)間進(jìn)行叫牌。
四次叫牌結(jié)束,如果所有玩家分?jǐn)?shù)都小于等于莊家分?jǐn)?shù),則判斷莊家分?jǐn)?shù)是否大于510,如果是,輸出Bust!,否則輸出Win!;如果小于某個(gè)玩家的分?jǐn)?shù),那么輸出Lose!。
G . World's Worst Bus Schedule
PKU 1304 http://poj.org/problem?id=1304
題意:公交車站有N(N <= 20)輛車,每輛車的發(fā)車時(shí)間間隔為a1 a2 a3 a4... a1 a2 a3 a4... a1 a2 a3 a4...,循環(huán)發(fā)車,問(wèn)某人在T時(shí)刻趕到公交車站,最少需要等待多少時(shí)間能夠乘上公交車。
題解:對(duì)于每輛公交車,設(shè)它的所有時(shí)間間隔之和為S,令T' = T mod S,然后枚舉所有的發(fā)車間隔,前i個(gè)發(fā)車間隔a[i]之和減去T'中的最小正值就是等這輛公交車需要的時(shí)間,取所有公交車的最小時(shí)間就是所求。