CodeChef May Challenge 2020 簡要題解

因爲之前沒打過只能打div2div2
感覺題還不錯的樣子

Coronavirus Spread

Isolation Centers

Sorting Vases

先對非二元環做,然後將二元環兩兩合併

code

Chef and Bitwise Product

比較腦殘的做法
從高往低枚舉
考慮對於一個可以0/10/1任意選的地方
00後面顯然在滿足下界情況直接貪心
然後選11繼續即可
注意特判L,RL,R
直接做是兩個loglog,但實際上想想感覺似乎可以一個loglog
假裝他可以

code

Triple Sort

顯然是先二操作縮成連通塊
變成求最大化邊的環覆蓋的環數
直接找每個簡單環顯然是錯的
直接狀壓dpdp枚舉子集即可

但做的時候傻逼的沒意識到爲什麼是錯的
比如這個圖
(1,2)(2,3)(3,1)(1,4),(4,1)(3,5)(5,3)(4,5),(5,6),(6,4)(1,2)(2,3)(3,1)(1,4),(4,1)(3,5)(5,3)(4,5),(5,6),(6,4)
於是在xdlxdl的建議下寫了個隨機化亂搞
然後它過了

code

Buying a New String

顯然是AA一段前綴和BB一段後綴
可以直接枚舉,然後在AcAc自動機上計算貢獻
唯一需要考慮的就是拼接的25225*2長度的貢獻
就是ABABA'B'-A'-B'即可
複雜度O(25AB)O(25|A||B|)

code

下面做法經fsyfsy教育/kk
正反串各建一個自動機
考慮一個AA的前綴,預處理整串的貢獻
考慮散串,在AcAc自動機failfail樹上dfsdfs
長度爲kk的位置對應反串的sks-k的位置
子樹加,每次就是在反串自動機上詢問maxmax

Binary Land

顯然的想法是矩乘
考慮維護兩個棧,分別記錄某一段前綴的後綴積和後綴的前綴積
每次彈出在第一個棧內彈出即可,加入在第二個內加入
第一個棧空了後把第二個丟過來即可
由於加入的矩陣每行只有三個可以做到O(n2)O(n^2)乘法
詢問由於最初是向量也是O(n2)O(n^2)

總複雜度O(Qn2)O(Qn^2)
由於咕咕咕並沒有寫代碼

Not a Real World Problem

考慮先讓貢獻全部爲正
建立最小割模型,s,ts,t分別表示1,11,-1
割哪邊的就代表取哪個,邊對應的流量可以簡單計算
然後相鄰之間連邊即可

注意輸出方案

code

Chef and Rainbow Road

又是被xdlxdl教育的一道題/kk
先將答案乘上iai\prod_ia_i
考慮對於m1e5m\le 1e5直接對每列構造生成函數ft(x)=iatixi=11atxf_t(x)=\sum_ia_t^ix^i=\frac{1}{1-a_tx}
然後乘起來即可
現在考慮m1e18m\le1e18怎麼做
本身要求的是[xk1]t11atx[x^{k-1}]\prod_{t}\frac{1}{1-a_tx}
考慮找到數c[]c[],滿足t11atx=tct1atx\prod_{t}\frac{1}{1-a_tx}=\sum_{t}\frac{c_t}{1-a_tx}
即滿足P(x)=iciji(1ajx)=1P(x)=\sum_{i}c_i\prod_{j\not=i}({1-a_jx})=1
由於P(x)P(x)xx取值無關,考慮帶入x=1aix=\frac{1}{a_i}
P(1ai)=ciji(1ajai)=1P(\frac{1}{a_i})=c_i\prod_{j\not=i}(1-\frac{a_j}{a_i})=1
於是只需要對gi(x)=j(1ajx)1aixg_i(x)=\frac{\prod_j(1-a_jx)}{1-a_ix}求值即可
用洛必達法則後直接對上面東西求導後的函數多點求值即可

code

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章