原创 調試代碼的一些技巧

1、檢查變量名 檢查一遍所有變量在代碼中出現的位置。看看它們是否應該在這個位置,或者有沒有與其它變量搞混了。比較常見的有nnn和mmm混淆,以及複製粘貼的時候忘了改序號、左右兒子等。 2、檢查符號 檢查一遍所有符號,尤其是>,<,>=

原创 一些亂搞的退火題

退火(全稱叫模擬退火)是一種隨機亂搞的玄學算法,大概是珂學家們發現隨機貪心往往效果不好,所以出現了在原策略上進行改動的方法。後來發現單純的小改動容易陷入局部最優解,就又有了這個玄學的退火。 不過我並不想講這個具體的過程,只是簡單說一些

原创 珂朵莉樹及一些相關題目

比分塊還要暴力、比線段樹還要好寫的功能萎縮而強大的數據結構。只要有類似於區間賦值的操作且數據隨機,珂朵莉樹就可以完成幾乎所有查詢。 先從一道例題說起: CF896C 也許是珂朵莉樹名字的由來?由於珂朵莉樹更加珂學所以人們漸漸放棄了老司

原创 一些字符串(水)題

晚上不想寫代碼,就水一發博客吧qwq。 P2444 [POI2000]病毒 鏈接 無限長的字符串就是能在ACAMACAMACAM上無限跑下去而不會撞到已有的字符串,所以建出ACAMACAMACAM判環即可。 P3763 [TJOI20

原创 NOIP2018遊記

day0 頹了一下午,見到了poorpool,後來找了半天A考場,最後又頹了一晚上。 day-1的時候我貌似說過我一定在10點前睡,然而歡迎來到實力至上主義的教室太好看了,再加上zzh十分毒瘤,所以最後就到了12點才睡。 day1 顯

原创 多項式各種操作

前些天學了一堆多項式的算法,今天總結一下。 乘法 樸素的NTT就不說了,主要說一下三模數NTT。 三模數NTT,顧名思義,就是選取三個適合做NTT的模數,然後把它們用CRT合併起來得到的答案再去對我們要求的模數取模。 爲了方便,這三個

原创 擴展歐幾里得算法

這個算法是用來解決這樣的問題的: 給定a,b,ca,b,c ,求 ax+by=cax+by=c 這個不定方程的最小非負整數解。 擴歐求的實際上是 ax+by=gcd(a,b)ax+by=gcd(a,b) 這個方程的解,所以只有

原创 KMP字符串匹配

KMP是一個單串匹配O(n)O(n) 的算法,不同於Hash,這個是保證正確的。 什麼是單串匹配呢?就是給你一個模式串P和一個文本串T,問P在T中的哪些位置出現過。 暴力做法就是把T的每個位置都跟P匹配一遍,複雜度爲O(len(T)∗

原创 平衡樹——Splay及其維護的相關信息

無限Orz Tarjan大神。 先扯一會,你知道Tarjan有多強嗎? 當然,除了能求強連通分量、割點、點雙、橋、邊雙的tarjan,以及離線O(1)求lca的tarjan,還有很多不叫tarjan但卻是Tarjan提出的算法/數據結

原创 manacher算法

和KMP一樣,是個字符串算法,是個O(n)算法,同樣也是個通過減少無意義匹配來降低複雜度的算法。 但哪裏不一樣呢? 哪兒都不一樣。 解決的問題不一樣,優化的方法和思路不一樣,代碼不一樣,還有這個比KMP簡單多了。 它解決的問題是這

原创 BZOJ5379: Tree

鏈接 扯淡 據說這道題是CF幾個月前某場比賽的題,然後被出到了前幾天雅禮集訓T1,於是就又成爲了一道BZOJ題。 結果最後因爲忘記建子文件夾光榮爆零 賽後測數據,第五個子任務在使用文件操作和不開O2的情況一個點1.5s左右輕鬆跑過所有

原创 Miller-rabbin算法

這個算法用於快速判斷一個數是否是質數。 那怎麼判呢? 首先,既然要快速,我們就不能用樸素的O(n‾√)O(n) 的試除法。我們會聯想到質數的一些性質: ap−1≡1 (mod p)(0<a<p)ap−1≡1 (mod p)(0<a<

原创 AC自動機

自動AC機是什麼?交上去就能AC? 要真是這樣,那還要OI幹什麼。 AC自動機相當於是Trie上KMP,相對於KMP,解決多串匹配問題,但比KMP要簡單,核心思想就是兩句話。 Code #include <iostream> #inc

原创 BSGS大法——有趣的分塊打表

對於三個整數A,B,CA,B,C ,滿足A,B<C<109A,B<C<109 且A,CA,C 互質,求一個最小的x使得Ax≡B (mod C)Ax≡B (mod C) ,怎麼做? 分塊打表! 令t=⌈C‾‾√⌉,x=i∗t−j (i,

原创 樹套樹——樹狀數組套主席樹

線段樹套平衡樹是什麼腦殘東西,複雜度就是假的,O(nlog3n)O(nlog3n) 讓人感覺非常不靠譜。所以我們爲什麼不用更好寫的樹狀數組代替線段樹,更好寫的主席樹(權值線段樹)代替平衡樹呢?而且,不僅是好寫,複雜度也是很對的O(nlog