CSY 教徒們
\CSY 教我/
x1 = true
(!x1 || !x2 ) && !x3 == true
A. x2 True , x3 True
B. x2 True , x3 False
C. x2 False , x3 True
D. x2 False , x3 False
答案:D
使用輾轉相除法得到介於 ~ 兩數之 GCD(最大公因數),至多需要的次數接近下列何者?
A. 50
B. 500
C. 5000
D. 50000
答案:A
將兩個各項係數皆不爲 且依照降冪排列的多項式相加,並去掉其係數爲 者。
本題是一題 debug 題,題目大致如下,由於筆者記憶力不好,因此變數名稱與原題稍有出入:
其實這有點像 merge_sort 中 merge 的過程,在盯了很久後會發現,問題出在這個 continue,在 continue 前並沒有將 idx1 與 idx2 加 1,因此若 時,程式將會進入無窮迴圈,選擇答案中會使 的選項即可。
欲在一個已排序好,大小為 n 的陣列 a[] 搜尋一個值 v 的位置。以下的code …(a)… 和 …(b)… 應填入什麼?
A.
B.
C.
D.
答案:B
這題在考的是二分搜的細節觀念。程式碼中的 和 分別代表目前解的下界和上界,並且是左閉右閉 的區間。因此如果選了 C 或 D,當 的時候會找不到。在選項 A 中,有些位置會到不了(例如 之類的),因此答案為 B。
將數字由大排到小 code 很醜
將數字依 sum of … sum of digit 由小排到大
題目來源:黃致皓、吳庭安
給定二數字 ,及多個購物清單,問至少買入各一 物之訂單有多少筆?買入一物的定義是,該物品加入購物籃的次數大於被拿出購物籃的次數。
購物清單格式:
每筆以 結尾,結尾前的各數字若為正整數 ,代表將商品 放入購物籃,若為 則代表將 拿出。
Sample Input 1
Output 1
以一個陣列記錄每種物品當前個數,最後判斷兩個物品個數是否都大於 0。
給定 顆六面骰子及 筆操作,骰子一開始面向之位置固定(4 在前,1 在上),有三種操作:
每筆操作格式如下:
若 為正,代表將 交換位置。
若 ,將編號 之骰子向前滾一面。
若 ,將編號 之骰子向右滾一面。
最後依序輸出每個骰子上方的點數。
一開始骰子:
3 | |||
---|---|---|---|
5 | 1 | 2 | 6 |
4 |
1 2
1 -2
1 -1
3 3
2 -1
3 -2
3 1
分數 | 限制 |
---|---|
20 % | n = 1 , 操作只有翻滾 |
80 % | 無特別限制 |
直接紀錄每個點數向前與向右轉後的點數為何,每次直接轉移過去即可
由於對面相加爲 7,因此我們只需儲存其中上、前、右方之數字即可。向右翻轉時,原本的左方(7 - 右方數字)變爲新的上方,而原來的上方變爲新的右方,向前翻轉以此類推。
環狀迷宮有 個房間,依序編號爲 ~ 。
玩家初始位置在房間 ,且只能依編號 的環狀順序走。
第 個房間有點數 ,每次離開房間 ,就可獲得 點數。
逃脫迷宮方法:依序蒐集 把鑰匙,第 把鑰匙可用點數 兌換,保證所有 都 之總和。
每次兌換完,手中的點數就會全部被清空,為了盡快逃出,玩家只要點數夠,就會馬上兌換鑰匙。
最後玩家蒐集完鑰匙後,會停在哪個房間?
Sample Input
Sample Output
解釋:
走過 號房間後得到 點點數(),於 號房間得到第一把鑰匙,點數歸零。
走過 號房間後得到 點點數(),於 號房間得到第二把鑰匙,點數歸零。
走過 號房間後得到 點點數(),於 號房間得到第三把鑰匙,點數歸零。
最後停在 號房間,輸出 。
分數 | 限制 |
---|---|
20% | |
80% | 無特殊限制 |
先假設本題是在一個正常序列上,要怎麼去做呢?
題目要求的是找到最小的 x 使得 鑰匙點數
我們可以令前綴和 ,接著,問題就轉換成,對於當前的位置 ,找到一個最小的位置 ,使得 鑰匙點數。這個地方由於 序列具有單調性,我們可以用二分搜去處理。
那麼在環狀序列上,該如何做呢?
可以發現,若將原序列複製一次,也就是令,則對於一個 找到的最小位置 , % 就會是得到這一把鑰匙後,在環上的位置!
且由於題目保證鑰匙點數小於所有房間點數和, 最大就只會是 ,因此將原序列複製一次後就相當足夠了。若本題沒有上述限制,其實也只要將需要的鑰匙點數預先 mod 所有房間點數和即可。
複雜度:
有 條 RNA 病毒,各自擁有一個 RNA 序列,且長度皆為 。
每條的輸入格式為下:
( 自身編號 , 親代編號 , RNA 序列 )
若自身編號等於親代編號則是根源。
其中自身編號為 ~
RNA 序列為由 A、U、C、G、@ 組成的字串。@ 為未知的字元,可任意為 A、U、C、G 其中一種。
求所有的親代和子代最小的差距總和。
Sample Input 1
Sample Output 1
Sample Input 2
Sample Output 2
分數 | 限制 |
---|---|
20 % | 無任何 @ 字元,且對於每個非根源節點 ,其親代 之編號皆小於它 |
40 % | 對於每個非根源節點 ,其親代 之編號皆小於它 |
40 % | 無特別限制 |
首先觀察到,每個位置的字元互不相干,因此我們只需要解決長度 = 1 的問題 m 次就好了。
再來,對於一個點的各個子節點所形成的子樹,他們的答案互不相關。也就是說,假設 有兩個子樹 、, 選擇的鹼基是什麼完全不會影響到 的最佳選擇,、 的最佳選擇皆只與其子樹與父節點 有關,因此我們考慮使用樹形動態規劃技巧 ( 樹 DP ) 來解決問題。
那要儲存什麼值呢?先以遞迴方式取得 子樹的最佳答案,接著直接從 進行轉移?這樣做的話會發現,你無法判斷 的鹼基與 的鹼基是否相同,不知道是否要將答案加一。因此,只儲存單一最佳答案並不能解決此一問題,考慮增加表格維度,如下:
設 爲以 爲根,且 的鹼基編號爲 的子樹的最小修改次數,則可對於所有 的子節點 ,枚舉 的鹼基編號 進行轉移。若 ,則將變異數加一。
轉移式如下:
。
複雜度: 爲鹼基種類數
可進一步儲存每個點以任意鹼基的最小值 ,如此在轉移時只需使用 即可,複雜度降爲 。(感謝吳邦一教授提醒)