發表文章

目前顯示的是有「TIOJ」標籤的文章

(Debug) TIOJ 1752 妹妹的汽水

Description 雖然經歷了這場讓人魂飛魄散的事件,但是經過護士姊姊細心診斷確定他的人及屬性都沒受創之後,妁艷回到了家。 隔天去了學校,學習了更多技能之後發現身體感覺並沒有什麼異狀。可是體內感覺卻有股蠢蠢欲動的力量……。 回到了家,突然想到昨天妹妹借的書還沒還給他,就去找妹妹。可是,妁艷在門外叫了好幾聲都沒反應,他就逕自進入妹妹的房間。 「喔哈哈!」進來之後發現妹妹不在,妁艷不自覺的笑了。他開始尋找目標物,從書櫃、抽屜、書包、床鋪、衣櫃等等地方仔細搜索之後,終於在書桌上找到了那本書。 「奇怪?」書上放著一張紙條,使妁艷有點疑惑,上面寫著:「$2, 3, 5, 7, 11, 13, 17, \ldots$。」 聰明的妁艷當然一看又知道是一串質數。找的口有點渴的妁艷,拿起桌上喝了一半的汽水準備一飲而盡,猛然發現蓋子竟然打不開,而且瓶蓋上還印了一個正整數 $n$ 和一個質數 $p$,仔細一看他才發現紙上還寫了:「打開汽水需要找出第 $p$ 個冒出的泡泡編號。」 為了喝到汽水,妁艷研究出了這種汽水冒泡的規律。 泡泡原本的順序是 $n$ 到 $1$,也就是 $n, n-1, n-2, \ldots, 3, 2, 1$。 從時間 $t=0$ 開始每秒會有些泡泡跟其他泡泡位置交換。 奇妙的是,它們都遵守第 $t$ 秒內時只有被編號第 $t$ 個質數 $q$ 整除的泡泡才可能變位置。 第 $t$ 秒內,對第 $i$ 個被 $q$ 整除的泡泡編號 $a$ 會跟第 $i+1$ 個被 $q$ 整除的泡泡編號 $b$ 比大小,如果 $a$ 大於 $b$,泡泡 $a$ 和 $b$ 就會交換位置,$a$ 繼續跟第 $i+2$ 個比,否則用 $b$ 跟第 $i+2$ 個比。 泡泡最後的位置順序的倒序就是冒泡順序。 例如 $n=8$, $t=0$ 時,順序是 $8, 7, 6, 5, 4, 3, 2, 1$。 $t=1$ 時,順序是 $6, 7, 4, 5, 2, 3, 8, 1$。($8$ 跟 $6$ 換、$8$ 跟 $4$ 換、$8$ 跟 $2$ 換且 $2, 4, 6, 8$ 都被 $2$ 整除) $t=2$ 時,順序是 $3, 7, 4, 5, 2, 6, 8, 1$。($6$ 跟 $3$ 換且 $3, 6$ 都被 $3$ 整除) ...

TIOJ 1790 好激烈

圖片
Description 「嗚,不可能,這不可能塞得進去!!! 啊~~~」妤嬌姊姊道。 為了前往外太空解救妁艷,妤嬌決定前往歐洲尋找最先進的航太科技。這個國家是位在白俄羅斯和波蘭的邊境的一個小王國。啵啵啪啪王國,一個世襲君主國家,國民血統為純正的 $1/2$ 白俄羅斯 + $1/2$ 波蘭的完美比例組成。國民擁有驚人的平均 $514$ 的智商,能發展出遠遠超越 SERN 的核物裡和遠遠超越地球聯合、吉翁、紮夫特的航太科技,並不意外。身為潮能力者,LEVEL-5,像是穿越電腦螢幕網路王國傳送 (Network Transfer to Realms, NTR) 這種事情妤嬌當然做過很多次。 「啊~ 好激烈,妤嬌,姊姊快不行了~ 在這樣下去姊姊會~~ 姊姊會壞掉~~」 「姊姊,我也…我也快不行了~~~」 由於妤嬌隨身攜帶的 laptop 螢幕太小了,要把人塞進去有點困難。妤嬌研判,照這樣的情況下去,再把兩個人 (妤嬌自己則可以穿越隧道過去) 都傳送過去之前電腦螢幕有可能會壞掉! 妤嬌說:「沒辦法,妳們兩個一起來吧!」 「嗚!! 兩邊!? 兩邊一起絕對不行的!!」兩位美少女同聲道。 (十分鐘過後) 「啊~ 妤嬌~~」 「妤嬌葛格~~ 啊~~」 三人都因為使力而身體微微泛紅,身上沾著彼此的汗珠。 「要去了!!!!!!」妤嬌喘著氣大喊。 「在裡面!?!?!?!?」 「妤嬌!!!!~~~~~~~~~」 周圍閃了幾下白光,費盡工夫,總算把兩人塞進螢幕裡面了。剩下的工作就有開啓「人工少女 3」把電腦中的兩人送到啵啵啪啪王國了。 「要產品序號!?」 點開遊戲後才發現事情不妙! 在妤嬌的記憶中,序號是由下列方法所生成的: 給定質數 $p$ 和正整數 $b, c, n$,定義序列 \[ \begin{cases} a_0 = 1,\\ a_i(a_{i+1}-c)=b,&\text{for }i = 0, 1, \ldots \end{cases} \] 序號為最小的正整數 $m$,使得 $p|ma_n-1$。由於妤嬌是個天才,你只需要幫他驗算就可以了,輸出序號 $\operatorname{mod}q$。 Input Format 第一行有五個正整數 $b, c, n, p, q$,其中 $p, q$ 為質數,意義如上...

TIOJ 1852 分眼皮

圖片
Description 你有 $n$ 張眼皮和三隻向姊,每張眼皮有他的角動量。 你希望把這些眼皮全部分給三隻向姊,為了避免眼皮爆走,所以需要讓向姊間的角動量差最小,否則向姊們就會吵架! (假設所有眼皮轉動方向都是逆時針方向,且對於每隻向姊,她的所有眼皮的旋轉中心都相同) Input Format 第 $1$ 行有一個數字 $n\ (3\leq n\leq24)$,代表眼皮的個數。 第 $2$ 行有 $n$ 個數字 $a_1, \ldots, a_n$,$1\leq a_i\leq10^9$,代表每張眼皮的角動量。 Output Format 輸出一個數字,代表角動量最大的向姊和角動量最小的向姊間的角動量差的最小值。 Sample Input 4 5 4 7 6 Sample Output 3 Solution 如果今天只有兩隻向姊,怎麼做呢?利用  meet-in-the-middle algorithm ,可以做到 $O(n2^{n/2})$ 的時間複雜度,比 naïve 演算法的 $O(2^n)$ 快。以下將介紹怎麼在有三隻向姊的情況下,同樣利用 meet-in-the-middle 的精神,在 $O(n3^{n/2})$ 時間內求出答案。為了後續的討論方便,我們允許某個 $a_i \leq 0$,且允許某隻向姊沒分到任何眼皮。 假定三隻向姊拿到的眼皮角動量總和分別為 $p, q, r$,不失一般性令 $p \leq q \leq r$,目標最小化 $r-p$。設 $s := a_1 + \ldots + a_n$,則以下的兩個敘述至少一個會成立: $p \leq q \leq s/3 \leq r$ $p \leq s/3 \leq q \leq r$ 如果我們知道怎麼算出第一種情況 $r-p$ 的最小值,只要把每個 $a_i$ 變號,第一種情況 $r-p$ 的最小值就變成「變號前的第二種情況 $r-p$ 的最小值」了。接下來我們專注在「在限制 $p \leq q \leq s/3 \leq r$ 下最小化 $r-p$」上。 將 $a_1, \ldots, a_n$ 分成兩堆,$A = \{a_1, \ldots, a_{\lfloor n/2\rfloor}\}$ 和 $B...

TIOJ 1317 統治世界 Reign

圖片
Description hellogameboy 正在進行一個神秘的計畫 他打算以 H 的力量來征服全世界,讓世界都屈服在他的 H 勢力之下 這時候正義的 hallogameboy 挺身而出,決心鼎力維持這個世界的正直 想像這世界是一個 $n\times n$ 的格子棋盤,每個格子都是一個城市 而時事潮流總有固定的流向,因此對於每個格子都有一個"潮流傳播方向" (上、下、左、右之一) 若某個城市的潮流是流向棋盤邊界外,當然,這個城市的潮流就不會傳播給任何人 hellogameboy 和 hallogameboy 將輪流展開行動, 由 hellogameboy 先展開 H 的攻勢,再換 hallogameboy 進行正直防守...... 攻防不斷交替地進行,直到所有城市都被佔領 一開始所有城市都是純潔的,沒有受到任何佔領 而 he(a)llohameboy 將選擇一個"源流城市"佔領 H (正直) 的力量就會從這個源流城市開始沿著每個格子的潮流傳播方向傳播 路上的城市都被佔領,直到某個潮流傳出邊界,或是遇到某個已被佔領的城市才停止。 以上圖為例(佔領攻防還沒結束,也不是最佳佔領策略) hellogameboy 先選擇 $(2,2)$,並佔領紅色的 $12$ 格 再來換 hallogameboy,選擇 $(5,7)$,佔領藍色的 $8$ 格 再來又輪到 hellogameboy,選擇 $(5,6)$,佔領綠色 $2$ 格 hallogameboy 再選擇 $(2,4)$,佔領黃色等 $5$ 格…… 給定一個地圖,假設 hallogameboy 和 hellogameboy 都是絕頂聰明的人物 那麼請問,最後 hellogameboy 將以 H 勢力會統領多少土地呢? Input Format 第一行為一個整數 $n$,代表地圖邊長。 再來為 $n$ 行,每行是一個不含空白的字串,由 l、r、u、d 構成,依序代表左、右、上、下的箭頭。 $1\leq n\leq 2000$ Output Format 一個整數,代表先者 (hellogameboy) 可以佔領多少格。 Sample Input 6 drludl rudlru dldldl r...

TIOJ 1670 新聞採訪

圖片
Description 「我與小明不相見已有二年餘了,我最不能忘記的是他的雙腿。(雖然他根本沒有)」 光陰荏苒,你如今是一位御用新聞記者,專門替國王烏龜的電視台採訪各式各樣的新聞。還記得 TIOJ 1623--國王烏龜的接駁車 嗎?大意就是國王烏龜開放死老百姓烏龜們去覲見國王,舉國上下無不歡聲雷動,一時之間各個直達皇宮接駁車的站牌前都排滿了烏龜,好不盛大!你自然被派遣過去負責採訪這場盛宴。並且他們看在你的才能,決定要讓你Live連線報導,你知道如果把這個難得的機會搞砸了你可能會變成小明第二。 因此,在開始報導之前你決定先去向前輩烏龜瞭解你的報導方式。 「 你待會要進行的報導方式呢,你看那邊有一條大排長龍的隊伍,共有 $n$ 隻烏龜排成一列,你需要選擇一個區間 $[A, B]$(包含$A, B$)進行採訪,採訪的方式是依序遞麥克風給這個區間每一隻烏龜,讓他們自由發言。必須注意的是因為要弄得看起來很有公信力,你採訪的 總人數不能小於 $L$ 個人 。 當然自由發言是有危險成份在的,有些反國王份子可能會講出危言聳聽的話,危害國王聲譽,所以我們會依序把烏龜標號 $0$ 或 $1$,$0$ 表示危險份子、$1$ 則是很安全。 所以,我們希望你能讓這個區間內 $\mathbf{1}$ 佔的比例越大越好 ,如果有很多個一樣好的區間,那就是總人數越少越好(但還是得 $\geq L$),如果還是有很多個,那就 $A$ 越小越好。 你選好你要採訪的區間了嗎?告訴我吧。 」 Input Format 輸入第一行含一個正整數 $T$,表示接下來有幾條隊伍要採訪(幾組詢問) 每組詢問第一行含兩個正整數 $n, L$($L \leq n$),分別表示隊伍長度跟採訪總人數下限。 第二行會是一個長度為 $n$ 的 $01$ 序列,依序表現出每隻烏龜危不危險。 $T \leq 400$ $1 \leq n \leq 100,000$ Output Format 對每組詢問輸出兩個正整數數字 $A$ 和 $B$,表示 $[A,B]$ 是你的最佳選擇。 ※這個序列編號由 $1$ 開始,到 $n$ 為止。 Sample Input 2 17 5 00101011011011010 20 4 1...

TIOJ 1284 賽車問題

Description 現在有 $n$ 輛往右邊跑的賽車,每一輛都有其固定的車速以及起始位置。 你是一位專業的攝影師,而你相信你的專業,順從你的渴望,你希望能夠抓準時機,一次把所有賽車通通照下來。 如果要把所有賽車通通照下來,那麼你的底片要夠長才行。 為了節省成本,你想要知道在所有時刻中,什麼時候最領先的車子跟最落後的車子的距離會最短。 手癢的你趕快來寫個程式求出 最短距離 吧! Input Format 輸入的第一列有一個正整數 $n$ ($2\leq n\leq 100,000$)。 接下來有 $n$ 列,每列有兩個整數 $v_i, s_i$ 依序代表第 $i$ 輛賽車的車速(單位:公尺/秒)以及起始座標(向右為正,單位:公尺)。 ($0\leq v_i, s_i\leq 1,000,000$) 噢對了,所有車子都位於不同的賽道,因此你不必考慮它們追撞的情形,也不用考慮車身的長度。 而且你可以假設所有車子的車速都不相同。 Output Format 請輸出所有時刻中(時間 $\geq 0$),最前面的車子與最後面的車子之最小水平間距。 只要四捨五入輸出至小數以下第二位即可。 Sample Input 3 1 1 2 0 3 0 Sample Output 0.50 Solution 這題的 $n$ 實在太大,沒辦法枚舉所有的超車事件來求出答案。注意到答案只要求到小數下第 $2$ 位,可以考慮用近似解。設 $x_i(t)$ 為第 $i$ 台車在 $t$ 秒時的位置,則題目問的就是 \[f(t) := \max_{1 \leq i \leq n} x_i(t) - \min_{1 \leq i \leq n} x_i(t)\] 在 $t \geq 0$ 的最小值。觀察到 $x_i(t) = v_i(t) + s_i$ 既是 convex function  也是 concave function ,所以 $f_1(t) := \max_{1\leq i\leq n}x_i(t)$ 是 convex function。 $f_2(t) := \min_{1\leq i\leq n}x_i(t)$ 是 concave function。 $f(t) = ...

TIOJ 1404 照亮的山景

圖片
Description 在一片山的上空,高度為 $t$ 處有 $n$ 個處於不同水平位置的燈泡,如上圖所示。 如果山的邊界上某一點與第 $i$ 盞燈的連線不經過任何山稜線上的一點,我們稱第 $i$ 盞燈可以照亮該點。 請問至少要打開幾盞燈,才能照亮山上每一個轉折點? Input Format 輸入可能包含多筆測試資料。 對於每筆測試資料: 第 $1$ 列:一個整數 $m$ ($1\leq m\leq 100,000$),代表山稜折線的轉折點個數。 第 $2$ ~ $m+1$ 列:$x_i, h_i$,依序代表轉折點的水平座標以及垂直海拔高度。($-100,000\leq x_i, h_i\leq 100,000$) 所有轉折點座標將以 $x$ 座標由小到大排列。 第 $m+2$ 列:$n, t$,其中 $n$ 代表燈泡個數,$t$ 代表所有燈泡的高度,該高度必定高於整座山最高轉折點的高度。 ($1\leq n, t\leq 100,000$) 第 $m+3$ 列:有 $n$ 個整數 $b_1, b_2, \ldots,  b_n$,代表 $n$ 個燈泡的水平座標,且依座標值由小到大排列。 Output Format 如果可以點亮某幾盞燈而照亮所有轉折點,請輸出最少需要點亮的燈泡數量。 否則請輸出 "you need more bulbs!"(不包含雙引號)。 Sample Input 6 1 1 3 3 4 1 7 1 8 3 11 1 4 5 1 5 6 10 6 1 1 3 3 4 1 7 1 8 3 11 1 2 5 1 5 Sample Output 2 you need more bulbs! Solution 首先,不難發現某個轉折點能被照到若且唯若有顆燈泡的位置在水平線 $y=t$ 上的某個開區間內。如果我們能求出每個轉折點對應的開區間,問題就被轉成下面這個形式:給定 $\mathbb{R}$ 上的 $m$ 個開區間 $\{(l_i, r_i)\}_{i=1}^m$,從 $b_1, \ldots, b_n \in \mathbb{R}$ 中選出...

TIOJ 1065 忍耐任務

Description 楓之谷是個平面捲動的線上遊戲,在這遊戲裡面,除了讓玩家不停地打怪物賺經驗值升級以外,還安排了一些「任務」給玩家解,只要完成了,就會有特別的獎勵。有的任務是收集一定數量的特定物品,而有的任務叫作「忍耐任務」。 顧名思義,忍耐任務就是在考驗玩家的耐性。在忍耐任務裡面,玩家會被差派到特別的地圖去,在這種地圖裡面,也許還是會有怪物,並且會有一些飛來飛去的飛行物,像是飛鏢一類的,然而當它們撞到玩家的時候,玩家幾乎不會損血,因為它們存在的意義並不是要將玩家擊斃,而只是要阻礙玩家前進。在這樣的地圖裡,通常會安排十分難走的路,例如說有非常小的平台來讓玩家跳躍,或是不時會有長矛刺到的繩梯,而且在路途上還安排了會阻礙玩家的飛行物和怪物,玩家只要一個不小心,就會掉下來。這路途常安排得十分漫長,而且一掉下來,就要重頭來過。而玩家的最終目標,就是要走完全程,拿到指定的物品,或是和指定的人物說話。 很難想像什麼人會喜歡解這種任務,可是真的有人熱中於此,甚至成為此間箇中高中。暱稱是阿特珞的這位玩家,就是這樣的一個奇人,她不但解自己接的忍耐任務,還幫忙別人解,甚至挑戰十五分鐘內解三個,熟練的程度甚至在遊戲中曾讓別人懷疑她是否使用外掛輔助程式。 成功的行動寓於周詳的計畫,在解一個任務之前,她已將這個地圖的底細調查清楚了。知道哪些地方有平台可以站立,也知道所有的飛行物體的軌跡和週期。然後她擬定了一連串的移動計畫,也就是在什麼時候要做什麼動作,像是蹲下,移動,或是跳躍。提供了周詳的地圖與計劃內容後,她想請你們寫一個程式,判斷她所擬定的計劃是否能成功執行。 Input Format 在這輸入的資料裡,總共包含一個場景,還有若干個移動計畫。我們假設這個場景是放在一個無窮大的二維的 $x-y$ 坐標系上。輸入的第一行將有一個整數 $l$ ($1 \leq l \leq 20$),代表之後將會輸入 $l$ 個水平線段,它們彼此不會相交或接觸。這些線段就是在地圖中可以站立的地方,(另外在跳躍的時候並不會因為頂到線段而掉下來。甚至當你正在往上「飛」的時候,你可以穿越上方的線段,直到下落的時候,才會停在線段上。) 每一行會包含一條線段的輸入資料,共有三個數 (可能有小數點),第一個數是這個線段的 $y$ 坐標,第二個數是左側 (較小) 端點的 $x$ 坐標,第三個數是右側...