原创 HDU 2896 病毒侵襲 【AC自動機】

HDU 2222 僅僅求出了和文本串匹配的模式串個數,本題要求求出匹配的模式串的編號。 不同的部分在代碼中的註釋部分。 #include <cstdio> #include <queue> #include <algorithm> #in

原创 POJ 2926 Requirements【最遠曼哈頓距離】

n個5維座標的點,求這n個點中曼哈頓距離的最大值。 暴力枚舉肯定超時。 只考慮二維空間上兩個座標之間的曼哈頓距離(x1, y1) 和 (x2, y2),|x1-x2| +|y1-y2|去掉絕對值符號後共有下列四種情況 (x1-x2) +

原创 SGU 134 Centroid【樹的重心】

樹的重心。遞歸求解即可。 #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; #define N

原创 HDU 4679 Terrorist’s destroy【Tree】

給一棵樹,每條邊上都有一個權值,去掉樹上任意一條邊之後,分成兩個子樹,兩個子樹的最長路與這條邊上的權值相乘,的到一個乘積。問去掉那一條邊可以使這個乘積最小。 首先找到樹上的最長路,那麼刪邊的時候有兩種情況: 1. 這條邊不是最長路上的邊

原创 ZOJ 3430 Detect the Virus 【AC自動機+解碼】

解碼的那些事兒,不多說。 注意解碼後的結果各種情況都有,用整數數組存儲,char數組會超char類型的範圍(這個事最蛋疼的啊)建立自動機的時候不能用0來判斷結束。 #include <cstdio> #include <algorith

原创 HDU 3065 病毒侵襲持續中

詢問每個模式串在文本傳中出現的次數。 文本串中出現的字符不一定都是大寫字母,只需要在匹配的時候,對文本串進行特殊處理,將連續的大寫字母段當成合法的一個文本串即可。 然後……就是簡單的統計了。 #include <cstdio> #

原创 POJ 2778 DNA Sequence【AC自動機+矩陣快速冪】

題意:給m個病毒字符串,問長度爲n的DNA片段有多少種沒有包含病毒串的。 參考:http://www.matrix67.com/blog/archives/276 首先解決這個問題:給定一個有向圖,問從A點恰好走k步(允許重複經過邊)到達

原创 POJ 1625 Censored【AC自動機+DP+大數】

給n個字母,構成長度爲m的串,總共有n^m種。給p個字符串,問n^m種字符串中不包含(不是子串)這p個字符串的個數。 將p個不能包含的字符串建立AC自動機,每個結點用val值來標記以當前節點爲後綴的字符串是否包含非法字符串(p個字符串中的

原创 HDU 4661 Message Passing 【Tree】

題意: 給一棵樹,每一個結點都有一個信息,每一個時刻,某一對相鄰的結點之間可以傳遞信息,那麼存在一個最少的時間,使得所有的節點都可以擁有所有的信息。但是,題目不是求最短時間,而是求最短時間的情況下,有多少種傳遞方式:某一時刻傳遞信息的雙方

原创 HDU 4664 Triangulation【博弈論】

一個平面上有n個點(一個凸多邊形的頂點),每次可以連接一個平面上的兩個點(不能和已經連接的邊相交),如果平面上已經出現了一個三角形,則不能在這個平面上繼續連接邊了。 現在總共有N個平面,每個平面上都有若干點。(就是有N個相同的遊戲同時進行

原创 HDU 2222 Keywords Search 【AC自動機模板】

詢問有多少個模式串出現在了文本串裏面。將模式串插入Trie樹中,然後跑一邊AC自動機統計一下就哦了。 獻上一份模板。 #include <cstdio> #include <algorithm> #include <iostream>

原创 POJ 3691 DNA repair【AC自動機+DP】

只能說這道題目的數據好強啊,以前寫的自動機都是有缺陷的但是可以過題,這次被坑大發了……嗚嗚 f(i, j)表示長度爲i的串,到j狀態時需要更改的次數。 f(i, u)  =  min(f(i, u), f(i-1, j) + (s[i]

原创 編譯器手工開棧

做題的時候經常遇到深度遞歸的,當然,可以改成非遞歸形式。如果寫成遞歸形式會爆棧,所以可以用手工擴展棧。 微軟的編譯器(C++) #pragma comment(linker, "/STACK:102400000,102400000")

原创 博弈論總結

有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的一個遊戲,別看這遊戲極其簡單,卻蘊含着深刻的數學原理。下面我們來分析一下要如何才能夠取勝。 (

原创 POJ 1987 Distance Statistics【Tree,點分治】

這道題目和POJ 1741基本一樣了。 樹上的分治。 此類算法參考論文:09年國家集訓隊論文《分治算法在樹的路徑問題中的應用——漆子超》 #include <cstdio> #include <cstring> #include <al