Problem
有 n 個地點,每個地點要不用高架橋、要不使用地下化道路兩種方式,每個民眾有兩個願望,分別希望哪裡以什麼方式建造,只要滿足每一個民眾的其中一種願望即可。
Sample Input
|
|
Sample Output
|
|
Solution
一道樸素的 2-SAT 問題。
建圖,利用 SCC 將點縮起來,形成 DAG 圖。
如果 val 與 !val 被縮在同一個點,即為矛盾。
當關係為 (a or b) and (c or !d) and …
|
|
有 n 個地點,每個地點要不用高架橋、要不使用地下化道路兩種方式,每個民眾有兩個願望,分別希望哪裡以什麼方式建造,只要滿足每一個民眾的其中一種願望即可。
|
|
|
|
一道樸素的 2-SAT 問題。
建圖,利用 SCC 將點縮起來,形成 DAG 圖。
如果 val 與 !val 被縮在同一個點,即為矛盾。
當關係為 (a or b) and (c or !d) and …
|
|
目標生成一個有根樹,每個節點的 degree 最多為 V,並且樹深度恰好為 D。
請問最多有幾個節點。
|
|
|
|
很明顯是一個等比級數的計算,中間牽涉到除法,利用費馬小定理找到乘法反元素,藉此完成除法。
特別記住,V 只得是 degree 而搜尋樹的分支數,因此 degree 會包含跟父親的連接。特別小心 V = 1 的情況,要不兩個點要不一個點,而 V = 2 則會退化擇一條鍊,在等比級數上的計算會有瑕疵。
|
|
給定 N 個隊伍,兩兩隊伍比賽兩次,已知部分比賽結果,勝者得三分,平手各得一分,輸者 零分。請問在剩餘比賽中,每個隊伍的最佳排名與最糟排名。
重點:剩下的比賽最多十場。
|
|
|
|
一開始以為題目只給我 10 場資訊,結果一直想不到 P 的解法,只有 10 場就直接窮舉 10 場的結果紀錄即可。
額外閱讀 Matrix67 网络流和棒球赛淘汰问题
|
|
給 n 個化合物,每個化合物長度 m。其中 n 為 2 的冪次。
建造一個分類的關係樹,每一個節點上會有分類依據長度依舊為 m,而每一個化合物按照輸入順序成為完滿樹的葉節點。
目標這個樹的花費越少越好,樹花費的計算為相鄰兩個節點之間的漢明碼距離總和。也就是與子節點所表示的字串之間有多少不同的字符。
|
|
|
|
事實上,我們可以分開考慮 m 位的結果,彼此之間的花費最小化即可。
當只考慮要填什麼的時候,如果兩個子樹填法有所交集,則表示選擇其中一個,與其子節點都不需要花費,如果是空集,則必然選擇其中一個子樹結果來補足,花費多 1。
|
|
在地球上,給定許多地點的經緯度,兩個人必須在中立領域中見面,兩個人分別在球面上的兩個點,中立領域則是兩點連線的中點,垂直拉出的一個大圓 (球體上的一圈)。
它們現在位於地球上某點,請問到大圓的最短距離為何。
|
|
|
|
特別小心,詢問的兩點相同,導致整個球體都是中立領域。
對於球體找到圓的最短距離,找出夾角即可。
首先拉出 AB 線,將其移動至眼前水平放置 (O A B 同一水平面),又 OM 會於 AB 中點拉出來的大圓夾角 theta (直接 AB 和 OM 內積得角度),此時的大圓應該是垂直 90 度,藉此得到最短距離。
|
|
給一段密文,輸出最長的明文,如果最長明文有多個,則輸出 Codeword not unique
。
加密的工序為
|
|
|
|
題目中有一段
Starting with the first empty slot in or after position t in string …
看起來 t 一點也不重要。也就是不用特定對 t 窮舉參數,將每個可以填入的位置都嘗試過當初始位置。
窮舉的順序,窮舉 s, n, i 可以在第一次填入工序中,得到明文結果。然後在第二步處理中,檢查是否明文填入時時候對應到原本的密文。
在窮舉前,可以事先計算殺人遊戲的殺戮順序,好在窮舉時得到明文結果。在第二步窮舉時,由於已經將部分明文填入好,剩餘的空格少了快一半,必須將其壓縮再一起,重新使用殺人遊戲的填入方式。
這一題很卡常數,很優化就優化,寫到眼神崩盤。
|
|
逆時針順序給定一個正交多邊形,請問內接最大圓為何?
|
|
|
|
首先,這題不能模擬退火,至少我的技巧退火沒結果。
於是二分最大圓半徑,接著窮舉所有可能匹配的圓,針對圓檢查是否包含於正交多邊形內部。
決定半徑之後,圓心存在於幾種可能
首先必須檢測圓心是否在正交多邊形中,用了射線法莫名其妙 WA,所以建議特別考慮於正交多邊形的內部判定。隨後檢查所有線段不會部分或全部在圓內部。
|
|
給予一個 Vexed! 遊戲,這遊戲類似於消球遊戲,可以左右拖動特定元素使其掉落,在一個瞬間中可以讓相鄰兩個相同元素同時消失。在下一個瞬間,仍在盤面上的元素會根據重力往下墜落,如果又發現存有相同元素相鄰,則會不斷地迭代消去。
請問如何在最少步數下把所有元素消去。
|
|
|
|
對於每一個盤面做紀錄,並且對於每一個元素嘗試是否能向左向右拉動,拉動之後將其模擬墜落相消的過程。使用 bfs 的方式進行路徑搜索,隨後回溯即可。
|
|
「話說,剛剛明明說的是合乎聖誕節的商品。這不是 H-GAME 嗎?哪裡有聖誕元素啊!」
「嗯,真虧你發現這點啊,但還是有點可惜,這是全齡版,沒有工口哦!」
「不管怎麼樣,一點也沒合聖誕節啊。」
「雖然你有好好學習許多東西,但對本質上完全沒有理解。」
「最近開始覺得有點明白了 …」
「那麼就來說明下這個作品吧」
「是一年前發售的大人氣美少女遊戲的續篇吧?」
「是的,那為什麼你沒有察覺到-『一年前』這句話所包含的意義」
「對於期盼著的人那就意味著 … 與戀人時隔一年的再會!」
在 GALGAME 故事發展過程中,竹馬幾乎沒勝過天降,走哪一條線進行發展正是玩 GALGAME 的樂趣。
然而有一款極為糟糕的 GALGAME 的初始方式則是在一開始選定座標下,系統會根據座標找到附近最鄰近少女,並且在隨後的故事情節都會圍繞這名少女。
遊戲的地圖設計很簡單,用一個矩形表示,現在已知 N 名少女的所在地 (都在矩形內部)。一開始選定的座標也必須落在矩形內,請問玩哪每個線路機率分布為何?
輸入有多組測資。
每組第一行會有三個整數 N, A, B,表示在$[0:A] \times [0:B]$ 地圖中有 N 個已知座標。
接下來會有 N 行,每行上會有兩個整數 x, y,表示每名少女所在的座標$(x, y)$ 保證不會有重疊的情況。
對於每組測資輸出一行,根據輸入順序輸出每一個故事線的機率。
|
|
|
|
|
|
給 N 個數字,找到最大子集滿足任 A, B 數字,A 不為 B 的質數倍。
|
|
|
|
看起來就是一個二分圖找最大獨立集,但是建造的速度要夠快,少說也要 500 ms,然後在二分匹配上必須採用很快速的最大流,這裡採用 dinic 版本,網路上搜索到這個版本挺不錯的。
為了遇見妳,已經撒了無數 TLE。
求到妳接受的那個瞬間,神啊!謝謝祢的禮物才讓我們相遇。對於最大流算法,一般而言會經過不斷地溯洄沖減, Dinic 分層圖的方式進行計算,但是可以利用指針對於每個節點進行記錄,在沖減時,對指針結果的下一條邊進行計算,而不對於每一個點的所有邊重頭來過。
接著,分層圖可以利用沖減時,進行計算,即當找到瓶頸時,更新該點的層次。取代一般重新使用 bfs 的分層計算。
最大獨立集 = 點數 - 最大匹配數。
|
|