原创 [acm/icpc2016ChinaFinal][CodeforcesGym101194] Mr.Panda and TubeMaster費用流

via. quailty 黑白染色定向 然後相當於每個點找一個後繼(就能串成很多個環 每個點拆成左右兩個 如果 i 是非必要點,那麼左邊 i 到右邊 i 連一條權值 0 的邊,表示我這個點連個自環(相當於就廢掉了 其他的

原创 [BZOJ4861][Beijing2017]魔法咒語 AC自動機+動態規劃+矩陣快速冪

對忌諱詞語構建AC自動機 Fi,j 表示長度爲i ,匹配到AC自動機第j 位的合法串方案數 當狀態數少的時候用矩陣轉移 #include <bits/stdc++.h> #define N 5050 const int mod

原创 AtCoder Grand Contest 014做題記錄

這場AtCoder的題目以結論題爲主 代碼都很短,想法也都很巧妙 A - Cookie Exchanges 按照題目描述暴力即可 關鍵在於時間複雜度的證明 對於三個數a ,b ,c ,不妨設a≤b≤c ,變換等價於對0,b−

原创 [BZOJ4869][Shoi2017]相逢是問候 擴展歐拉定理+勢能線段樹

根據擴展歐拉定理 當x≥ϕ(p) 時有ax≡ax%ϕ(p)+ϕ(p)(modp) 我們發現在至多進行t 次操作後,a≡ca(modp) ,t爲進行p=ϕ(p) 多少次之後p=1 ,t 的大小爲O(log2p) 級別的 對此,

原创 [BZOJ4870][Shoi2017]組合數問題 矩陣快速冪

誒感覺這題很套路啊 聽說賽場上寫出來的人不多 可能比賽的時候比較緊張這題放最後一題沒那麼好像吧 解法到不是特別難 相當於求一個模意義下的楊輝三角嘛 塞到矩陣裏面轉移就好了 #include <bits/stdc++.h>

原创 [BZOJ1856][SCOI2010]字符串

類Catalan數定義 按照推倒Catalan數的方法推倒這題的公式 答案即爲Cmn+m−Cm−1n+m /***********************************************************

原创 [BZOJ4873][Shoi2017]壽司餐廳 網絡流

選擇區間[l,r],那麼必須選擇區間[l,r-1]和[l+1,r] 很容易可得一個最大權閉合子圖的模型 對於選取一個單點,花費的式子的形式是mx2+cx 對每個單點開一個節點p ,對每個顏色開一個節點q 對於單點編號爲t 顏

原创 一道有趣的數學證明題

試證明等式: ∑j=0n∑k=j+1nCjnCkn(k−j)=nC22n2 從北京到廣州兩個半小時的飛機,上飛機前把題目抄在草稿紙上,心想飛機上無聊正好把這題給做了,做完看看電影睡睡覺估計就到了。然而這道題着實做了兩個半小時,距離

原创 [BZOJ1048][HAOI2007]分割矩陣 記憶化搜索

觀察均方差公式 若將一個區域的代價定於爲(該區域的和−平均數)2 ,答案爲代價的和n−−−−−√ 動態規劃Fx1,y1,x2,y2,t 表示圖上一個矩形,對這個矩形分割t 次得到的代價 當t=1時Fx1,y1,x2,y2,1

原创 [BZOJ4731][UOJ267]魔法小程序

先把代碼讀懂,可以理解成爲c是b的高維前綴和 a[i] 是第i 維的長度 顯然長度大於1的維數不會超過log2(m) 暴力還原回b就行了 #include <bits/stdc++.h> #define INF 214748

原创 [acm/icpc2016SEERC][CodeforcesGym101164] Castle KMP

相當於結尾單點插入,單點打標記,查詢該字符串所有border的標記和。KMP維護border,轉移的時候把標記和一起轉移就好 原串border的border還是原串border O(n)掃一遍就行 #include <bits

原创 [BZOJ1055][HAOI2008]玩具取名 記憶化搜索

Fl,r,t 表示[l,r]區間的字符串是否能夠用字符t代替 轉移不是特別複雜,不過我還是拿記憶化搜索來寫了 O(N3) 狀態,每個狀態O(N) 轉移,總時間代價O(N4) #include <bits/stdc++.h> #

原创 [BZOJ4872][Shoi2017]分手是祝願 數學期望

先看N=k的,考慮一下怎麼用最少步數解決這個問題。 一個做法是從高位到低位,沒遇到一個開着的燈就將它關閉,易證這樣的策略是最優的,而且是唯一的。 問題轉化爲目前有n個開關,其中有t個開關需要被按奇數次,求期望步數。F[t]表示

原创 [POJ2420]模擬退火

模擬退火模板 輸出用%.0f不要用%.0lf WA一下午 #include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> #define N

原创 [NOI2014]魔法森林 二分答案

簡單題吧 二進制各個位置是獨立的 所以可以一位一位貪心來做 爆枚每一位是0還是1,然後O(n) 驗證 時間代價O(Nlog2M) #include <bits/stdc++.h> #define N 200050 usin