Problem
模擬一款推硬幣的遊戲,在一個 N x N 的盤面,可以從上下左右四個方向塞入自己的硬幣。
現在有兩個人輪流玩,一開始由 ‘X’ 作為先手,塞入硬幣的過程中,會將同行或同列的硬幣往前推,如果同一個的硬幣個數大於 N,則末端的硬幣將會掉出盤面。
模擬遊戲,直到其中一個玩家的連線個數大於另一名玩家,連線個數只看行、列皆具有相同硬幣的情況。
Sample Input
|
|
Sample Output
|
|
Solution
|
|
模擬一款推硬幣的遊戲,在一個 N x N 的盤面,可以從上下左右四個方向塞入自己的硬幣。
現在有兩個人輪流玩,一開始由 ‘X’ 作為先手,塞入硬幣的過程中,會將同行或同列的硬幣往前推,如果同一個的硬幣個數大於 N,則末端的硬幣將會掉出盤面。
模擬遊戲,直到其中一個玩家的連線個數大於另一名玩家,連線個數只看行、列皆具有相同硬幣的情況。
|
|
|
|
|
|
給一加密原則,現在要求解密,並且在只有一組文本情況下輸出正解。
一開始給定一字串 L,接著加密時,每一組訊息的 word,由左而右加密。
|
|
|
|
搜索,雖然看起來有點可怕,但是條件很多,如果搜索到兩種以上的情況,立即退出。
|
|
有 n 個鐵環,現在已知鐵環之間緊扣在一起,目標要把鐵環串成一鏈,可以選擇將鐵環剪開,隨後再將其串在一起。
找最少剪開的次數。
|
|
|
|
n < 15,窮舉哪幾個環需要剪開,接著把這些需要剪開的環先抽出來,查看剩餘的鐵環的情況,必須滿足都是鏈狀,而且連通元件的個數不能大於剪開的個數 + 1,如此一來,在放回剪開的環才能串在一起。
鏈狀的檢查:檢查每一個 node 的 degree 不可大於 2,同時不應該存在環。
|
|
模擬郵件發送的協定訊息,給定給一台 mail server 上的使用者名稱,接著發送群組訊息。
每一組發送者,會按照輸入順序的 mail server,將相同的 server 上的使用者統一發送,如果存在不合法的使用者名稱,必須回傳找不到,如果對一個 mail server 中都沒有合法使用者,則忽略此次傳送。
|
|
|
|
一個純模擬的題目,關於此類協定可以在計算機網路中學到。
保證寄信者都是合法的,小心每一行的資訊可能很長,用 char array 很容易 buffer overflow。也因此掛了很多 WA。
|
|
給一個 2D 地圖,上面放置一骰子,人從 2D 地圖的下方往上方看,骰子必須貼著某一條邊,往上下左右的地方滾過去,滾的時候必須滿足,其骰子上方的點數與地圖該格的點數相同,或者是移動到星號位置。
一開始給定骰子面向玩家的點數、以及骰子上方的點數,骰子滾動出去回到原本地方的最短路徑為何?
|
|
|
|
每一個 2D 位置 (x, y) 會有兩個骰子資訊做為紀錄,只需要知道骰子的兩個面,即可知道骰子的結構。
針對其狀態進行 bfs 搜索,手動打表維護骰子滾動的資訊。
|
|
single value function 的意思?問問 劉寶鈞 老師 吧!
強烈建議遠離 此課程,分析如下描述, 劉寶鈞 老師強烈建議把定義背得一模一樣,最好不要翻譯,因為很難達到一樣的水平,也很難說好。資料庫歷史悠久,因此歷史課程會持續一陣子,課程內容並沒有相當多的實務經驗。老師秉持著數年專業,保證嚴格批閱所有考卷。
如果沒人抱怨,我來說說這鬼畜的經歷,絕不能讓其消散。
保證題目描述與錯字 100% 複製考卷
傳統檔案系統為何不能共享 而資料庫如何做到可以共享?(10 分)
傳統檔案系統的資料存在各自的電腦中,而且格式不一,有相當大的重複資料,由於各自管理所需要的資料,更新時間也會不一致,因此在共享的支援相當不利,共享的結果不一定是最新、不能同時匹配在不同的電腦中的資料。
資料庫系統將資料集中化管理,收集到同一個系統中,並且藉由 SQL 中的 DML 支持使用者進行共享資料的存取、檢索,由系統管理同一時間多名使用者對資料的存取。
上述為零分作答,劉寶鈞老師說明若沒提到 SCHEME DATA
一律零分。
以 Relation Model 為例 說明 Data Model 之三要素。(10 分)
略說-有 資料表示法、資料的操作、約束條件,舉幾個例子便可完事。
此題作答還算正常,但是沒有舉例子大致上會被扣到慘不忍睹。
比較說明 DDL 及 DML。(10 分)
略說-Data Definition Language、Data Manipulation Language,分別是定義資料庫、資料表用的,另一個是對使用者詢問、操作資料。
此題作答還算正常,但是沒有舉例子大致上會被扣到慘不忍睹。
何謂 3-value logic ?並證明 P OR (NOT P) = 1
在 2-value logic 是成立的,但在 3-value logic is not always true。(10 分)
3-value logic 分別為 true
, false
, unknown
。
在 2-value 中
P | NOT P | P OR (NOT P) |
---|---|---|
T | F | T |
F | T | T |
在 3-value 中
P | NOT P | P OR (NOT P) |
---|---|---|
T | F | T |
F | T | T |
unknown | unknown | unknown |
用 0 表示 false, 1 表示 true, 1/2 表示 unknown,AND = MIN, OR = MAX, NOT = 1 - x。
=> P = 1/2, P OR (NOT P) = MAX(0.5, 1 - 0.5) = 0.5 = unknown。
unknown 不屬於 true,因此 3-value 在 P OR (NOT P) = 1
not always true。
以上作答零分,劉寶鈞老師在考卷上對 unknown
用紅筆寫了 What ?
一開始直接零分,之後才勉為其難拿到五分。投影片上面也這麼寫的,到底在 What ?
什麼勁,你自己拿出來講的東西上都這麼寫,寫下去分數還沒有?
寫出若含 NULL value 五個 single value function 的規則。(10 分)
WHAT the fuck about single value function
?
略列表 AND OR NOT EQUAL PRODUCT 的幾種情況。
上述為零分作答,劉寶鈞老師說明 single value function 的要寫出 aggregate function。我問老師「為什麼不直接寫 aggregate function?」老師回答道「就是故意不這麼寫。」
寫出 SQL query 之 SELECT, FROM, WHERE, GROUP BY, HAVING 之義意。(10 分)
錯字直接按表抄,這一題原本對於 HAVING 的解釋不夠完善,掛掉直接只剩下五分。WTF,五個定義錯一個就直接砍一半分數?對於 HAVING 只有寫提供 WHERE 無法進行 aggregation function 的判斷條件,必須與 GROUP BY 一起使用。這樣難道錯了嗎?GROUP BY 都解釋了,你還說我錯?
我不是肚子裡的肥蟲,一定是我蠢得無可救藥,拿了不及格的成績?
很久沒有衝動想要殺人,這下子又開始想殺人。
助教不替老師改考卷,讓老師這樣改考卷行嗎?
我是個壞學生,這門課真的氣死人,出口罵髒話根本不足以洩憤。
給一個地勢圖,詢問若高度低於 x 時,有多少連通子圖。
|
|
|
|
由於詢問操作的 x 是嚴格遞增,可以發現盤面上的元素越來越少。如果反過來操作,從高度 x 由大到小開始詢問,就可以發現元素越來越多,同時是一個聯集的操作,如此一來可以使用并查集運行。
把每一個高度位置,從高到低排序,針對詢問依序將地點放置進去,每次的放置必須與相鄰存在的元素進行聯集。
為了加快速度
|
|
寫一個模擬成績登錄系統的程式。
|
|
|
|
純苦工題目。
Try adding 1e-5 to all floating point values as you print them.
難怪會 WA,看到時小夥伴們都傻眼,不過應該也是因為大部分仍然使用 float
輸出,用 double
反而會得到 WA 的例子不在少數。
|
|
在長條圖中,每一條有其的數值和顏色屬性,找到一個最大的面積,使得每一個顏色都出現過。
|
|
|
|
對於每一個長條 h[i]
,勢必將往左往右延伸到第一個數值比較低的,因此會得到一個區間 [l, r]
,如果 [l, r]
之間不具有所有顏色,則忽略之。反之紀錄 h[i] * (r - l + 1)
是否為最大值。這樣的貪心方式,盡可能會具有最多的顏色,同時考慮到所有最大面積會卡住的地方。
但是窮舉找到每一個 [l, r]
相當費時,這裡運用單調堆的思路,分別從左、從右側往反方向掃描,掃描時維護堆裡面元素呈現遞減情況,分別找到左右端點後,檢查是否區間內有相符的顏色個數。
找所有左右端點只需要 O(n)
時間,但是檢查區間內的顏色個數是否符合則必須 O(nm)
。
|
|
給一個 n = 3 魔術方塊的盤面,找最少操作次數使其每一面顏色都相同。
每一次操作限定旋轉 90 度。如果需要的步數大於 7 步,直接輸出 Impossible
。
|
|
|
|
首先,關於旋轉操作只能手動打表,總共會有 9 種旋轉序列 (窮舉時操作成順、逆兩種),其中的 6 種序列會使得相鄰的面旋轉 90 度 (必須特別考慮這邊緣的旋轉)。
關於啟發式:六個面中,其中一個面具有最多的顏色,將會是預估的最少移動操作。
這一個啟發式相當重要,也非常難想,參考 http://blog.csdn.net/qq564690377/article/details/16867503
一開始使用 IDA* 的效果似乎不很好,於是換了雙向 BFS (doubling BFS),由於步數限定 7 步內,從目標狀態建表 4 步內的結果。接著對於每一組詢問,搜索 3 步內的操作,查看是否會相遇。
狀態壓縮可以採用重新命名,也就是最小化表示法,不管顏色,只考慮同構。
|
|