POI 2018.10.20
[POI2005]BANK-Cash Dispenser
有多少個4位字串是所有操作序列的子串。
10^4列舉字串。暴力判斷會TLE
發現,我們就是在每個操作序列中不斷找第一個出現的c字元。
預處理每個位置p的下一個c字元在哪裡。nxt[N][10000][10]
然後O(N*4)判斷。
[POI2012]SQU-Squarks
設有n個互不相同的正整數{X1,X2,…Xn},任取兩個Xi,Xj(i≠j),能算出Xi+Xj。現在所有取法共n*(n-1)/2個和,要你求出X1,X2,…Xn。
3<=n<=300, 每個正整數不超過10^8
考試題。
這種沒有任何東西的題,一定要列舉固定一些的。
為了方便比較大小,對和排序。然後對X從小到大考慮。
發現,一些和是確定的。a1+a2=b1,a1+a3=b2,然後就不能確定a1+a4和a2+a3哪個大。
列舉a2+a3=bx,然後知道了a1,a2,a3刪除b1,b2,bx,剩下最小的是a1+a4,求出a4,然後刪掉a1,a2,a3 +a4。
以此類推。
不合法:不存在這個和、數字有重複、不是正整數。大概是O(n^3logn)但是可能找幾次就掛了,到不了上界。
突破口:列舉固定一些東西。
[POI2015]PIE
記錄印章的x點進行匹配。紙上每個x點最多訪問兩次。.點不會印下去,只會訪問一次。複雜度可以保證。
根據題意模擬即可。
[POI2008]PER-Permutation
現在給你一個元素個數為n的多重集的一個排列和m,求這個排列的排名取模m。
多重集合排列的康拓展開。
m不一定是質數。
從左往右掃位置的貢獻。
對於一個位置i,一個比s[i]小的還沒有被固定的x,貢獻是:(n-i)!/(a1!*...an!)*ax
a1..an表示,第j個數,固定i前面的位置之後,在i~n中出現的次數。
理解乘的那個ax就是把ax!消去一個。
然後對這些做和,乘法分配律,發現第i位的貢獻,就是(n-i)!/(a1!*...an!)*(比s[i]小的數的出現次數和)
(比s[i]小的數的出現次數和)可以用樹狀陣列維護。
然後每固定一個數,就可以把這個數的出現次數ai-1。
但是m不一定是質數。m=p1^q1*p2^q2*.....pk^qk
可以對每個pk,維護(n-i)!/(a1!*...an!)的值(除去所有的質數p),以及分母中p的次數。
當移動位置i的時候,可以把aj--,對應每個pk中,只要提前預處理(1~300000)對於每個k,=bi*pk^li(bi是除去pk之後),記錄bi,bi的逆元,pk的次數li
然後,aj--,對應分子乘一個aj,把pk次數消一消然後把baj乘上去。
n-i變成n-i-1,把n-i的逆元乘上去,把pk次數消一消。
每次用中國剩餘定理合併即可。
複雜度:O(nlnm+nlogn)不包括預處理複雜度