PB的一些神題(1)

首先ORZ PB優化

ARC068F

考慮在k的位置把一個合法序列掰成兩半:\([1,k-1]\)\([k+1,n]\)spa

先考慮擺\([k+1,n]\)的方案數,容易發現剩下的是一個單調隊列,每次能夠從頭尾兩端取。設\(A_i\)表示有\(i\)個元素的單調隊列的取法,有\(A_0=A_1=1,A_i=2A_{i-1}(i\geq 2)\),顯然這能夠預處理翻譯

而後是考慮\([1,k-1]\)的方案數。能夠發現code

  • \([1,k-1]\)內的最小值要大於\([k+1,n]\)內的最大值(性質1)
  • \([1,k-1]\)由兩個單調降低序列穿插而成,且有一個隊列在\(k\)處結束(性質2)

\(f[i][j]\)表示填了\(i\)個數,最小值爲\(j\)的方案數排序

考慮新加一個數\(k\),若是\(k<i\),那直接轉移,不然只有當前沒填過的最大的\(k\)能加入序列,不然會構成大於2個單調降低序列或者破壞性質2.隊列

因此有\(f[i][j]=\sum\limits_{k>j} f[i][k]+f[i-1][j]\)遊戲

後綴和優化便可get

代碼it

AGC014D

首先 和你旁邊的人 手玩一下樣例和本身造的樹io

而後你旁邊的人就會罵你把必敗態給他玩

而後你會發現,若是存在葉子節點,選它的父親能夠迫使後手選葉子節點,重複這個過程。

再想一下,若是把已經塗色的點刪掉,這個過程就是貪心求完美匹配的過程。

因而有結論:若是存在完美匹配,後手勝,不然先手勝。

代碼

AGC005F

一個取模引起的血案

這東西正着算很難算,考慮反着算 而後你就作完了

\(f_{x,k}\)表示選k個點組成的連通圖中不包括x的方案數,易知這k個點都在x的子樹中

因此\(f_{x,k}=C^n_k-\sum\limits_{u\in x} C^{sz_u}_k\),\(ans_k=\sum f_{x,k}=n*C^n_k-\sum\limits_x\sum\limits_{u\in x} C^{sz_u}_k\)

\(sz_u=i\)的個數爲\(num_i\),則

\(ans_k=n*C^n_k-\sum\limits_{i=1}^{n-1} num_i*C^{i}_k\\=n*C^n_k-\sum\limits_{i=1}^{n-1} \frac{i!}{(i-k)!k!}\\=n*C^n_k-\frac{1}{k!}\sum\limits_{i=1}^{n-1} \frac{i!num_i}{(i-k)!}\)

\(A_i=num_i*i!\),\(B_i=\frac{1}{(n-i)!}\),這就是一個套路的NTT

代碼

ARC082E

從原圖中隨便取一個凸多邊形出來,設頂點點集爲\(S\),凸多邊形內(不含頂點)的點的集合爲\(T\)

\(T\)的子集爲\(T'\),則$ S\cup T'$有\(2^{|T|}\)種取法,即\(2^{|S\cup T|-|S|}\)種取法,是否是和原題求的東西很像呢?也就是說,一個存在凸包的點集對答案有1的貢獻。

因而就枚算一下不存在凸包的點集,即所有點共線的點集的個數,直接暴力\(O(n^3)\)

代碼

AGC010E

首先能夠發現,不互質的數的相對位置不會改變。

而後你按字典序,對一個數\(x\),把它和儘可能小的不和它互質的數連邊(這個我不知道怎麼講清楚,看代碼8……),而後你就獲得了一堆拓撲圖。把它們丟去拓撲排序,按照題意,每次必定會把當前最大的入度爲0的點輸出,用優先隊列維護拓撲排序的過程便可。

代碼

AGC010D

以前按奇數的個數討論勝負,一看到題解"奇數個偶數"我就知道我想假樂

而後從新想

若是這個序列中若是存在1,把這個序列中(不爲1的數-1)加起來,若是和爲奇數先手勝,不然後手勝。

考慮前後手的一輪操做,在沒有除法的狀況下,能夠保證奇/偶數個數的奇偶性不變,一樣,在這個過程當中,gcd爲奇數,因此除法不影響奇/偶數個數的奇偶性。而後變到1就不能操做,偶數個數整體趨勢仍是減小的。當只剩一個偶數和一堆1時,根據上面的結論先手勝。因此有偶數個奇數時,先手必勝。

不然若是有偶數個偶數時,考慮遊戲中任意一個局面,它的gcd爲1,說明原序列中有\(\geq 1\)個奇數。也就是說,若是先手對偶數執行-1操做,gcd一直爲奇數,除掉了之後奇偶數的個數不變,即變成了有奇數個偶數的狀況,此時先手必敗。那操做奇數呢?只剩下一個奇數時才能這麼幹,不然仍是先手必敗,理由同上。因此有偶數個偶數,且奇數個數\(> 1\)時,後手必勝,不然除掉gcd繼續處理。

模擬一下就完了

代碼

AGC008E

首先能夠建一個\(i\rightarrow p_i\)的圖,它顯然會有不少個環。一個\(i\rightarrow a_i\)的圖是由\(i\rightarrow p_i\)\(i\rightarrow p_{p_i}\)的邊組成

而後考慮一個環在通過這樣子變化後會變成怎樣:

  • 全是\(i\rightarrow p_i\)的邊

    和原圖同樣

  • 全是\(i\rightarrow p_{p_i}\)的邊

    奇環沒被拆掉,不過和原來的環長得不同。

    偶環被拆成兩個大小同樣的環。

  • 兩種邊都有

    最後會造成環套樹,且樹是鏈的形態,一個環點只能掛一條鏈。

如今從\(i\rightarrow a_i\)反推會\(i\rightarrow p_i\)


  • 偶環和自環沒變化,貢獻爲1

    奇環能夠變得不同也能夠維持原樣,貢獻爲2

    合併環,設合併\(2i\)個長爲\(l\)的環。因爲環的形態是固定的,因此合併兩個環的方案數爲\(l\) . 而後環對內的順序和環對的相對順序沒有關係,因此最後方案數爲\(\frac{l^i*(2i)!}{i!2^i}\)

  • 環套樹
    設掛鏈的環點爲關鍵點,鏈長爲\(len\),一個點和它後邊第一個關鍵點的距離爲\(dis\)

    若是\(len<dis\),鏈的第一個點有兩個地方塞,因此有兩種塞法

    若是\(len=dis\),只有一種塞法

    不然沒有塞法

加法/乘法原理統計一下就好了

代碼

CF1217F

1操做map判斷有無連邊,2操做可撤銷並查集維護

上面是假的,在線要寫ETT,然而LOJ最短的ETT板子也有6k……

考慮\(lstans\)只有0和1兩種取值,而後就能夠把一個詢問\(q_i\)拆成兩個\(q_{i,1},q_{i,2}\),組成全局詢問。對全局詢問處理,處理出和下一個和\(q_{i,j}\)徹底同樣的詢問出現的時間\(nxt\),則\(q_{i,j}\)這個詢問存在的時間爲\([i+1,nxt]\)。而後線段樹分治+可撤銷並查集進行處理。

處理方法:分治按時間分治。記上次的答案爲\(lstans\),而後處理出真的詢問/修改。若是是詢問直接詢問。若是是修改就拿個map記一下這個修改有沒有被加過,沒被加過就把這個修改對應的區間加上這條邊,不然不加。

對於\(lstans\oplus 1\)對應的修改,也要判斷是否能夠加到線段樹裏進行加邊,可是不喲用修改map!!

正確性嘛……沒有涉及到的邊會一直加,直到被涉及到……

代碼

AGC036F

哎金華集訓講過來着?證實我在睡覺

這裏意譯翻譯一個官方題解,感受很妙:

考慮直接容斥:

求全部\(i\)知足\(p_i^2+i^2<(2n)^2+1\)的狀況下,欽定\(k\)\(i\)知足\(p_i^2+i^2<n^2\)的方案數。設\(l_i\)表示知足\(x^2+i^2<n^2\)最大的\(x\)\(r_i\)表示知足\(x^2+i^2<(2n)^2+1\)最大的\(x\).令\(被欽定了沒被欽定h_i=l_i(被欽定了)\;or\;r_i(沒被欽定)\)。把\(h_i\)從小到大排序,則方案數爲\(\prod\limits_{i=0}^{2n-1} (h_i-i)\)

而後你 就須要和出題人同樣有強大的腦洞 要考慮一下\(h\)有什麼限制:

\(l_i\)\(r_i\)劃分紅三個集合\(A\),\(B\),\(C\)

  • \(A=\{l_i|\;0\leq i\leq n-1\}\)
  • \(B=\{r_i|\;n\leq i\leq 2n-1\}\)
  • \(C=\{r_i|\;0\leq i\leq n-1\}\)

\(A\),\(B\),\(C\)裏的元素分別爲\(a\),\(b\),\(c\),把它們升序排序會發現全部的\(c\)\(a\)\(b\)的前面。

而後對於\(n\leq i\leq 2n-1\)\(h_i\)必須等於\(r_i\)。對於\(0\leq i \leq n-1\)\(h_i\)能夠在\(l_i,r_i\)裏選一個

先枚舉選了多少個\(a\),而後考慮到\(i\)變大時\(l_i\)\(r_i\)都是遞減的,且對於同一個\(i\)\(l_i<r_i\)。因此設\(dp[i][j]\)表示dp到第\(i\)個數,選了\(j\)\(a\). 先把全部的\(l,r\)排序,而後分類討論這是\(a\)仍是\(b\)仍是\(c\),再記錄一下填了有多少個\(b\)就能夠\(O(1)\)肯定一個數的位置啦,就完了8

代碼

AGC004F

一題拖一星期我也真是厲害……

樹是個二分圖,因而把它黑白染色,設黑點權值爲\(-1\),白點權值爲\(1\),以\(x\)爲根的子樹和爲\(f_x\)

則答案爲\(\sum\limits_{i=1}^n |f_i|\)

咱們把黑點當作洞,把白點當作球。這個式子就是讓\(i\)子樹內全部子樹內全部的洞和球都匹配完。爲了達成這目的,咱們須要經過父邊運一些球進來或運出去

奇環套樹

設環邊鏈接的兩個點爲\(u,v\)。所以\(u,v\)同色,就是咱們操做一次,能夠往\(u,v\)同時放下或同時拿出一個球,因此能夠計算出操做\((u,v)\)的次數(即\(f_1/2\)),剩下的按樹的作

偶環套樹

此時\(u,v\)不一樣色,所以操做一次\(u\rightarrow v\)就至關於把\(u\)和它祖先的\(f\)\(+1\),把\(v\)和它祖先的\(f\)\(-1\)\(v\rightarrow u\)同理)

設操做\(u\rightarrow v\)\(x\)次(\(x<0\)即爲操做\(v\rightarrow u\))

即要求\(\sum\limits_{x\in fa_u}|f_x-x|+\sum\limits_{y\in fa_v} |-f_y-x|\)的最小值

\(x\)取中位數便可

代碼

相關文章
相關標籤/搜索