原创 HIT2018春校賽 I題 略解

題目描述如下:甲乙丙丁四人遊戲,甲有二整數 X 和 Y,四人已知 2 <= X <= Y <= N,但乙丙丁未知 X 和 Y 確值。現在,甲告訴乙 X + Y 的值,甲告訴丙 X * Y 的值,下面四人對話: 乙:我不知道 X 和

原创 NOIP2013D1T3 貨車運輸 題解

(題目描述略) 算法思路:先求原圖最大生成樹,再用樹鏈剖分,套 ST 表求 RMQ 即可。 求最大生成樹可用 Kruskal 算法,用帶路徑壓縮的並查集維護。 做樹鏈剖分時將樹從邊表示轉爲左兒子右兄弟表示,這和鏈式前向星表示是等價

原创 最小最大堆 數據結構說解

最小最大堆的定義 最小最大堆(min-max heap)是支持兩種操作 DeleteMin 和 DeleteMax 的數據結構,每個操作用時 O(log N)。該結構與二叉堆相同,不過,其堆序性質爲:對於在偶數深度上的任意節點 X

原创 POJ2778 DNA Sequence 題解(AC自動機+矩陣快速冪)

(題目描述略) 本題對於時間的要求比較嚴格,這意味着樸素的搜索算法是很難用優化手段通過的。爲了解決這個問題,我們需要用一種不同於枚舉的算法。 幾乎任何一個問題都有其對應的圖論模型,這個問題也不例外。我們可以將此問題轉化爲在其對應的

原创 淺析分形迷宮搜索解法

概述 筆者最初接觸到分形迷宮是在某日瀏覽了 matrix67 的一篇博客“大開眼界:世上最無敵的迷宮當數‘分形迷宮’”(網址 http://www.matrix67.com/blog/archives/74 ),當時瞭解到利用遞

原创 NOIP2016 略解

普及組第一題 買鉛筆 水題,連循環都不需要。100 分代碼如下: #include"stdio.h" int main() { freopen("pencil.in","r",stdin); freopen("pe

原创 洛谷P2007 魔方 題解(矩陣乘法)

(題目描述略) 本題標算爲搜索,但由於本題時間和空間較爲寬裕,我們可以考慮一種較高端的算法以提高自己的編程水平。將這道題用矩陣乘法做是可接受的。 我們將當前魔方的狀態用一個 54 * 1 的矩陣表示,將每種轉移用一個 54 * 5

原创 HIT2018春校賽 J題 略解

題目描述如下:25 個互不相等的數,每次比較 5 個數的相對大小,要求最大數和次大數,求最優策略下比較次數的期望值(是個確定的值)。T 組數據,每組輸入 N,輸出期望精確到小數點後 N 位。 據說此題爲 HIT2018 春校賽 J

原创 NOIP1998P2 階乘之和 題解

(題目描述略) 本題可以用高精度暴力求解,但代碼量過大。我們在這裏有一種優化的思路。 由於 n! + (n - 1)! + (n - 2)! + .. + 2! + 1! = (..((((0 + 1) * n + 1) * (n

原创 高精度基數排序

若對一個大整數序列進行排序操作,設序列中元素個數爲 n,最大元素在十進制表示下的長度爲 m,則快速排序的時間複雜度爲 O(nmlog2n ),此時對任意兩個數的比對時間佔 O(m)。在這裏,對任意兩個整型數的比較不再是常數時間複雜

原创 高精度除高精度

算法流程: 第一步,讀入被除數 a 和 除數 b,判斷是否 a < b,是則輸出 0 並結束算法,否則令 answer := 0; 第二步,令餘數 remainder := 0,令 i 從被除數最高位的下標開始; 第三步,令

原创 Manacher 字符串迴文查詢算法說解

Manacher算法是一種線性時間複雜度的字符串迴文查詢算法,可以查詢給定字符串內所有的迴文串。時間複雜度 O(n),空間複雜度 O(n),其中 n 爲字符串的長度。 對於迴文串而言,存在長度爲奇數的迴文串和長度爲偶數的迴文串,而

原创 NOIP2013D1T2 火柴排隊 題解

(題目描述略) 對於距離最小,其貪心策略爲將兩序列升序排序後比較。以下爲簡易的證明: 設對任意 a1 < a2,b1 < b2, 第一種排布是 ..a1a2..,..b1b2..,此時距離爲 (a1 - b1) ^ 2 + (

原创 NOIP2017D1T2 時間複雜度 題解

(題目描述略) 注意以下情況: FE 不匹配導致 ERR,包括 F 多於 E 導致代碼結束後循環未全部跳出,和 F 少於 E 導致代碼執行過程中跳出代碼塊(該情況下可能局部 F 少於 E,但全局 F 等於 E)兩種情況; 循環中可能

原创 NOIP2016P4 魔法陣 題解

(題目描述略) 設魔法值爲 j 物品 numjnum_jnumj​ 個,則魔法陣 xa,xb,xc,xdx_a, x_b, x_c, x_dxa​,xb​,xc​,xd​ 對於 A, B, C, D 物品貢獻分別爲 numxb∗num