1. 程式人生 > >POI 2018.10.20

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)不包括預處理複雜度