以爲有必要在NOI以前開一篇學習內容記錄。
至於爲何要取這個標題呢?也許並無什麼特殊的藉口吧。數組
在LOJ上搬了三道原題給你們考了考,而後你們都在考試就我一我的在划水。函數
給一個串\(S\),\(q\)次詢問知足是串\(S[l_1,r_1]\)的前綴且是串\(S[l_2,r_2]\)的後綴的最長迴文串長度。\(|S|,q\le2\times10^5\)學習
把串\(S\)反過來接在後面建迴文樹,而後就是求兩個點的公共祖先中深度不超過兩子串長的深度最大值。優化
有\(n\)個球,其中\(m\)個是紅色的,其他的是藍色的,從中隨機選出\(k\)個,若選出了\(x\)個紅球則得分爲\(x^L\)。求指望得分模\(998244353\)。共\(T\)組數據,每組數據的\(L\)是相同的。\(T\le200,L\le2\times10^5,m,k\le n\le 2\times10^7\)ui
\[\binom{n}{k}Ans=\sum_{i=0}^k\binom{m}{i}\binom{n-m}{k-i}i^L\\=\sum_{i=0}^k\binom{m}{i}\binom{n-m}{k-i}\sum_{j=0}^LS(L,j)j!\binom{i}{j}\\=\sum_{j=0}^LS(L,j)j!\sum_{i=0}^k\binom{m}{i}\binom{n-m}{k-i}\binom{i}{j}\\=\sum_{j=0}^LS(L,j)j!\binom{m}{j}\sum_{i=0}^k\binom{m-j}{i-j}\binom{n-m}{k-i}\\=\sum_{j=0}^LS(L,j)j!\binom{m}{j}\binom{n-j}{k-j}\]
預處理第\(L\)行第二類斯特林數便可。spa
交互題。一棵\(n(n\le1000)\)個節點的樹,每次能夠給交互庫一個長度爲\(n\)的數組\(d_i\),交互庫會對於每一個\(i\),在樹上標記與點\(i\)距離不超過\(d_i\)且不爲\(i\)自己的全部點,而後返回一個\(01\)串表示哪些點有標記。你須要在\(80\)次詢問內還原出樹的形態。.net
定義\(query(s,t)\)表示作一次詢問,將\(s\)集合中包含的全部數的\(d_i\)設爲\(t\),其他的\(d_i\)爲\(0\)。其返回值爲一個集合\(s'\)。
第一步是求出每一個點到\(1\)號點的距離。動態維護\(s_0\)表示到\(1\)號點距離爲\(2^k\)的偶數倍的點集,\(s_1\)表示到\(1\)號點距離爲\(2^k\)的奇數倍的點集,以及一個集合數組\(S\),其第\(i\)位\(S_i\)表示到\(1\)號點距離爲\([(i-1)\times2^k,i\times2^k)\)的全部點。初始時\(k_0=\lceil\log n\rceil\),\(s_0=\{1\},s_1=\varnothing,S=\{\{1,2...n\}\}\)。每次將\(k\)減\(1\),並詢問\(query(s_0,2^k),query(s_1,2^k),query(s_0,2^k-1),query(s_1,2^k-1)\),顯然\(s_0'=s_0\cup s_1\),而後經過一些集合操做能夠獲得\(s_1'\),同時將每一個\(S_i\)分裂爲\(S_{2i}\)與\(S_{2i+1}\)後能夠獲得\(S'\)。重複此過程直到\(k=0\),每次須要作\(4\)次詢問,總詢問次數爲\(4\log n\)。
接下來考慮對每一個點求其父親編號。對於每一個深度\(d\),枚舉\(i\in[0,\lceil\log n\rceil)\),將該深度全部節點中二進制位第\(i\)位爲\(1\)的位置加入集合\(s\)並詢問\(query(s,1)\),而後再枚舉全部被標記到的\(d+1\)深度的節點更新答案。看上去須要\(n\log n\)次詢問,但實際上\(\%3\)相等的深度能夠一塊兒作詢問,所以就只須要\(3\log n\)次詢問了。
總詢問次數\(7\log n\)。code
給一個長度爲\(n\)且每一個元素都在\([1,c]\)的數列\(a_i\),定義其一個子序列的權值爲最大的\(k\)知足全部長度爲\(k\)的全部元素在\([1,c]\)的序列均在這個子序列中做爲子序列出現過。先要求對於\(i\in[0,n]\)求有多少\(a_i\)的子序列知足其權值剛好爲\(i\)。\(n,c\le3000\),答案對\(998244353\)取模後輸出。遞歸
權值爲\(k\)意味着子序列至多能夠分爲\(k\)段使每段內均包含\([1,c]\)的全部數。考慮\(dp\)。設\(f_{i,j}\)表示前\(i\)個數已經分了\(j\)段且\(i\)剛好是第\(j\)段的最後一個數的方案數,注意爲了不算從算重,須要強制分段時每段最後一個數字是段內第一次出現,能夠從\(f_{i,j}\)轉移到\(f_{k,j+1}\),轉移係數是一堆\(2^x-1\)的乘積。記\(ans_j\)表示答案,那麼就能夠用\(f_{i,j}\)貢獻給\(ans_j\),這裏須要乘上\(i\)後面隨便選不構成新的一段的方案數,這個係數能夠在\(dp\)的過程當中計算出。這種作法的總複雜度是\(O(\frac{n^3}{c})\)的。
在\(c\)很小時上述作法沒法經過本題。不過咱們還有一個更加簡單的\(O(\frac{n^22^c}{c})\)的作法,將二者結合後便可經過本題。隊列
給出一個\(m\)次多項式\(G(x)\)以及\(n\)個數\(x_i\),有一個\(n\)次項係數爲\(1\)的\(n\)次多項式\(F(x)\)對於全部的\(x_i\)均知足\(F(x_i)=G(x_i)\),求\(F(k)\)。\(m<n\le5\times10^6\)
令\(H(x)=F(x)-G(x)\),則\(H(x)\)爲一個\(n\)次多項式,且\(n\)個零點即爲\(\{x_i\}\)。故\(F(x)=G(x)+\prod_{i=1}^n(x-x_i)\)。
一個\(n\times m\)的網格,每一個格子上有一個數\(0/1\),初始時會讀入\(k\)個位置\((x_i,y_i)\)表示該位置上的數是\(1\),其他位置上的數均是\(0\)。每次操做能夠將某一行或者某一列的全部數取反,求最少多少次操做後可使全部位置都變成\(0\)。有\(q\)次修改操做,爲對輸入的某一行或者某一列取反,要求在每次修改後求出答案。數據保證始終有解。\(n,m\le10^6,k,q\le3\times10^5\)
因爲保證有解,所以任意兩行要麼全等要麼所有相反。維護與第一行不一樣的行數\(A\)以及第一行\(1\)的數量\(B\),答案爲\(\min(A+B,n+m-A-B)\)。\(A,B\)都可動態維護,複雜度線性。
一個字符集大小爲\(n\)的字符串,每次有\(p_i\)的機率向後添加字符\(i\),當出現連續兩個相同字符時中止操做。求中止時字符串的指望長度。\(n\le10^7, \sum_{i=1}^np_i=1\)
設\(f_i\)表示結束時長度爲\(i\)的機率,\({f_k}_i\)表示結束時長度爲\(i\)且最後一個字符爲\(j\)的機率,\(g_i\)表示長度爲\(i\)未結束的機率,\(F(x),F_k(x),G(x)\)分別爲三者的機率生成函數。因而就有以下的一些等式:
\[F(x)+G(x)=1+G(x)x\\G(x)(p_kx)^2=F_k(x)(1+p_kx)\]
對前式求導並代入\(x=1\)可得
\[F'(x)+G'(x)=G'(x)x+G(x)\\F'(1)=G(1)\]
再將\(x=1\)代入後式可得
\[\frac{G(1)p_k^2}{1+p_k}=F_k(x)\\\sum_{i=1}^n\frac{p_i^2}{1+p_i}G(1)=\sum_{i=1}^nF_i(1)=F(1)=1\\G(1)=\frac{1}{\sum_{i=1}^n\frac{p_i^2}{1+p_i}}\]
線性求逆元便可作到線性複雜度。
給一個字符串\(S\),\(q\)次詢問從\(S\)中選出\(m\)個子串(能夠爲空)順序拼接起來後能夠獲得多少種本質不一樣的串。\(|S|,q\le10^5,m\le10^{10}\)
爲了不算重,一種可行的策略是,全部方案的子串選取都應該儘可能靠後。換言之,對於一個選取方案中相鄰的兩個子串\(t_i,t_{i+1}\),應知足\(t_{i+1}\)前接上\(t_i\)的最後一個字符後不爲原串\(S\)的子串。
記\(dp_{i,j}\)表示考慮了最後\(i\)個子串,當前已構造串的第一位字符是\(j\)的方案數。能夠發現轉移大體形如\(dp_{i+1,k}=\sum_{j}dp_{i,j}coef_{j,k}+C_k\),這裏的\(coef_{j,k}\)和\(C_k\)都可以經過後綴自動機上\(dp\)求出。這一步的複雜度爲\(O(\sigma n)\)。
能夠發現上述\(dp\)能夠寫成矩陣的形式。因爲\(q\)次詢問的轉移矩陣都是同樣的,所以能夠預處理出轉移矩陣的\(1,2,3...\sqrt m,2\sqrt m,3\sqrt m...\)次冪,能夠將複雜度作到\(O((\sqrt m+q)\sigma^3)\),沒法經過本題。
考慮答案是一個行向量乘上轉移矩陣的\(m\)次冪再乘上一個列向量的結果。所以能夠從前日後維護前綴行向量以及後綴列向量,複雜度能夠作到\(O(m\sigma^2+q\sigma)\),能夠經過本題。
參加了學校裏的學考模擬,又墊底了。
懶得寫了本身看吧......
一個結論是,對於任意的\(x\),\(10x+[0,9]\)這\(10\)個數的答案之和必定是\(45\)。
所以只須要暴力計算最後的不超過\(9\)個數便可。
然而這樣\(TLE\)了。
因此就只計算\(1\)個數就好了。
給兩個長度分別爲\(n\)和\(m\),字符集大小爲\(3\)的串,求其最長公共不降子序列。\(n,m\le10^6\)
一個顯然的思路是,枚舉從前日後選了多少個\(1\),枚舉從後往前選了多少個\(3\),中間的部分全都選\(2\)。考慮優化這個過程,從大到小枚舉選擇了多少個\(1\),維護從後往前選\(3\)數量的決策集合(只添不刪),假設從後往前選了\(i\)個\(3\)後兩個串前面分別剩下\(a_1,a_2\)個\(2\),當前枚舉選了\(j\)個\(1\)致使兩個串的前綴分別有\(b_1,b_2\)個\(2\)不能選(固然這裏要保證\(i,j\)這一對是合法的),那麼此時\(2\)的貢獻就是\(\min(a_1-b_1,a_2-b_2)\)。這個東西能夠根據\(a_1-a_2,b_1-b_2\)的大小討論,而後維護兩棵線段樹/\(BIT\)就好了。時間複雜度\(O(n\log n)\)。
上午參加了學校裏的學考模擬,又墊底了。
下午開始寫2018 Multi-University Training Contest 2,差很少作完了,題解啥的明天再補。
上午在家裏頹頹頹。
下午過來查成績。竟然查不到,果真停課選手沒有人權。
求\(\int_{l_1}^{r_1}\int_{l_2}^{r_2}...\int_{l_n}^{r_n}|x_1+x_2+...+x_n|dx_1dx_2...dx_n\)。\(n\le15\),答案模\(998244353\)後輸出。
將積分展開,最終是要在函數\(F(x)=\text{sgn}(x)x^{n+1}\)上求\(2^n\)個點值,\(dfs\)的話能夠作到\(O(2^n\log n)\)。
對於一個\(n\)階排列,記每一個數向左第一個大於它的位置爲\(l_i\)(不存在記爲\(0\)),記每一個數向右第一個大於它的位置爲\(r_i\)(不存在記爲\(n+1\)),令這個排列的權值爲\(P=\sum_{i=1}^n\min(i-l_i,r_i-i)\),給出\(n,m\)求權值爲\(m\)的\(n\)階排列數量。答案對給定大質數取模。\(n\le200,m\le10^9,10^8\le mod\le10^9\)
令\(n\)階排列的答案的生成函數爲\(F_n(x)\),邊界\(F_0(x)=1\)。考慮\(n\)階排列的構成,即在一個\(n-1\)階排列的\(n\)個間隔中選擇一個插入\(n\)這個數,所以\(F_n(x)=\sum_{i=0}^{n-1}\binom{n-1}{i}x^{\min(i+1,n-i)}F_{i}F_{n-1-i}\)。打表能夠發現\(F_{200}(x)\)的最高次項指數爲\(m=735\),因此直接暴力代入\(x=0...m\)求出點值後多點差值便可,複雜度\(O(n^2m+Tm^2)\)。
給一張圖,選若干條路徑使得通過每一條邊剛好一次,要求路徑條數儘可能少,輸出方案。\(n,m\le10^5\)
不一樣連通塊顯然相互獨立。連通塊內根據奇度點數量求歐拉路/歐拉回路便可。
有一個集合\(S\)初始爲\(\{1,2...n\}\),兩我的博弈,每次操做能夠選取集合內的一個數並移除集合內它的全部約數(含自己),不能操做者輸。給定\(n\),求是否先手必勝。\(n\le500\)
結論是先手必勝。能夠考慮初始時\(S=\{2...n\}\),若是次數先手必勝,則原問題按照這種策略亦能夠先手必勝,不然先手取走\(1\),一樣能夠獲勝。
構造一個\(n\times n\)的\(01\)矩陣,要求\(1\)的數量超過\(85000\)而且不存在兩行擁有超過\(1\)個相同的\(1\)的位置。\(n\le2000\)
假設\(n=p^2\),其中\(p\)爲質數,能夠考慮枚舉\(i,j\in[0,p)\),構造一個長度爲\(p^2\)的\(01\)串\(S\),其第\(kp+(jk+i)\bmod p\)位爲\(1\)。這樣的構造顯然是知足條件的。
求至少有\(A\)行全\(1\),至少有\(B\)列全\(1\)的\(n\times m\)的\(01\)矩陣數量模\(998244353\)。\(n,m,A,B\le3000\)
先只考慮一維的狀況。答案確定是\(\sum_{i=A}^nf_i\binom{n}{i}2^{(n-i)m}\),這樣實際有\(j\)行全\(1\)的方案被計算了\(\sum_{i=A}^jf_i\binom{j}{i}\)次,所以\(\sum_{i=A}^jf_i\binom{j}{i}=1\),\(f_j=1-\sum_{i=A}^{j-1}f_i\binom{j}{i}\)。
兩維的容斥是同樣的,令\(g_j=1-\sum_{i=B}^{j-1}g_i\binom{j}{i}\),最終答案即爲\(\sum_{i=A}^n\sum_{j=B}^mf_ig_j\binom{n}{i}\binom{m}{j}2^{(n-i)(m-j)}\)。
給出一個排列\(b_i\),要求維護一個序列\(a_i\)支持區間加\(1\)以及查詢區間\(\lfloor\frac{a_i}{b_i}\rfloor\)之和。\(n,m\le10^5\)
記\(t_i\)表示\(a_i\)還要加多少次才能使\(\lfloor\frac{a_i}{b_i}\rfloor\)加\(1\),維護\(t_i\)的區間最小值,每次修改操做就暴力找到全部\(t_i\)爲\(1\)的位置進行更新,用兩棵線段樹/線段樹+\(BIT\)實現便可,因爲\(b_i\)是排列,所以更新次數不超過\(n\ln n\),總複雜度\(O(n\log^2n)\)。
求\((\sum_{i=1}^{10}a_ix^i)^n\)有多少項係數爲奇數,答案模\(998244353\)。\(n\le10^9\)
考慮更通常的問題,求\(f(x)^ng(x)\)有多少項係數爲奇數。一個性質是\(f(x)^2\equiv f(x^2)\bmod 2\),所以\(f(x)^n\)在\(n\)爲偶數的時候奇數項必定均爲\(0\)。把\(g(x)\)拆成\(p(x)+q(x)x\)知足\(p(x),q(x)\)的奇數項也均爲\(0\),那麼\(f(x)^np(x),f(x)^nq(x)x\)兩部分的答案獨立,能夠分別計算,從而能夠將問題遞歸爲求\(f(x)^{n/2}p(x)\)與\(f(x)^{n/2}\)的答案。\(n\)爲奇數的話就乘一個\(f(x)\)到\(g(x)\)中去便可。
求大小爲\(n\)的隨機廣義線段樹上一次\(query(l,r)\)操做會通過的節點數量的指望模\(998244353\)。\(q\)次詢問(每次詢問的\(n\)是相同的),\(n,q\le10^6\)
考慮一棵廣義線段樹的生成方式,等價於初始有\(n\)個長度爲\(1\)的區間,每次隨機合併兩個相鄰的區間。接着考慮一棵廣義線段樹上一個區間\([l,r]\)出現的機率。若\(l=1,r=n\)那麼機率顯然爲\(1\),不然若\(l=1\)或\(r=n\),那麼機率爲\(\frac{1}{r-l+1}\)(即要求某次合併是這\(r-l+1\)次合併中最晚發生的),不然機率爲\(\frac{2}{(r-l+1)(r-l+2)}=2(\frac{1}{r-l+1}-\frac{1}{r-l+2})\)(即要求共\(r-l+2\)次合併中某兩次是在最後發生的)。
對於一次\(query(l,r)\),根據指望的線性性,答案爲全部與\([l,r]\)有交且其父親未被\([l,r]\)徹底包含的區間的出現機率之和。後者有點難以計算,能夠轉換成被\([l,r]\)包含的葉子減去被\([l,r]\)包含的非葉子的機率,這樣就顯得能夠計算了。
計算時涉及到的東西只有逆元的區間和,\(O(n)\)預處理後每次詢問能夠作到\(O(1)\)。分類討論是真的難
有一個長爲\(n\)的數組\(a_i\),你能夠任意次花費\(y\)的代價交換相鄰的兩個數,交換結束後你須要付出\(x\)乘上逆序對數的代價,求最小代價。\(n\le10^5\)
答案是\(\min(x,y)\)乘上逆序對數。
地理竟然及格了。然而仍是因爲政治生物不及格被D了一頓(小聲BB)
有一個長度爲\(n\)的序列\(a_i(0\le a_i < m)\),每次操做你能夠選擇一個子序列,把這個子序列中的數\(x\)變成\(x+1\bmod m\),求最少操做多少次可使序列單調不降。\(n,m\le3\times10^5\)
二分後貪心\(check\)便可。可恥地WA了一發(捂臉)
給一個長度爲\(n\)的\(01\)串,求有多少個區間內包含一個對應字符均相同的下標等差數列。\(n\le3\times10^5\)
結論是不合法串的長度不會超過\(9\),因此直接暴力就行了,複雜度\(O(9n)\)。
證實:手動驗證便可。
一個長度爲\(n\)的序列\(\{a_i\}\),\(q\)次詢問\(x,y\),問是否存在一個下標序列\(x=p_1<p_2<...<p_k=y\)知足\(a_{p_i}\&a_{p_{i+1}}\neq 0\)。\(n,q\le3\times10^5\)
記\(f_{i,j}\)表示從\(i\)出發可以到達的最近的且第\(j\)位上爲\(1\)的下標是多少,轉移顯然。
詢問的話就取\(a_r\)第\(j\)位爲\(1\)的\(\min\{f_{l,j}\}\)判斷與\(r\)的大小關係便可。
複雜度\(O(n\log^2n+q\log n)\)。
給一棵\(n\)個節點的二叉樹,每條邊上有一個小寫字母或者\(?\),\(q\)次修改操做,每次修改某條邊上的字符,問修改後是否存在一種方案,使得給全部\(?\)填上小寫字母后,全部葉子到根的路徑字符串經重排後是否能所有相同,若能,還須要求出每種字符在這個字符串裏的最多出現次數。\(n,q\le1.5\times10^5\)
顯然全部葉子的深度必須所有相等。而全部葉子深度全都相等的樹,在縮去只有一個兒子的節點後,樹高是\(O(\sqrt n)\)的。記\(s_i\)表示深度爲\(i\)的節點數量,顯然\(s_{i-1}\le s_i\),而縮點會致使全部\(s_{i-1}=s_i\)的層被縮掉,保留下來的每一層均知足\(s_{i-1}<s_i\),所以總層數爲\(O(\sqrt n)\)。
對(縮點後的)樹上每一個節點\(x\)記\(dp_{x,y}\)表示\(x\)向下走到某個葉子的全部路徑中,\(y\)字符的最多出現次數是多少,記\(len_x\)表示\(x\)向下走到某個葉子的距離。那麼第一問答案爲Yes
當且僅當對於全部\(x\),均知足\(\sum dp_{x,y}\le len_x\),必要性顯然,充分性可經過構造證實。
接着只要對每次詢問暴力更新就行了,因爲保證了每一個點的度數,複雜度\(O(n\sigma+q\sqrt n)\)或\(O((n+q)\sqrt n)\)。
回去上文化課了。
全天學考三模。晚自習竟然獲批來機房?
開始補Codeforces Global Round 3的題,題解明天放。
上午學考三模,下午是毫無心義的試卷講評。
有一張\(n\)個點的圖,每一個點上有一個權值\(a_i\),兩個點\(i,j\)之間有邊當且僅當\(\gcd(a_i,a_j)=1\)。現給出\(k(k\le\frac n2)\),要求找出一個大小爲\(k\)的點集,知足這個點集是獨立集,或者這個點集的導出子圖中沒有孤立點(即每一個點的度數均不爲零)。\(6\le2k\le n\le10^5,2\le a_i \le 10^7\)
先隨便找出一個極大獨立集\(S\),若\(|S|\ge\frac n2\)那麼就直接結束了,不然對每一個不在\(S\)中的點求它與\(S\)中的哪個之間有邊(如有多個則任意一個都可),從而能夠把所有\(n\)個點分紅\(|S|\)個連通塊,假設這時有\(m\)個連通塊是孤立點,那麼能夠證實對於任意的\(k\le n-m\)都可以構造出答案。
因爲\(m\le|S|-1\),因此根據這種策略咱們必定能夠構造出任意\(k\le \max(|S|,n-|S|+1)\)的答案,因爲\(k\le\frac n2\),於是這種方法必定能夠構造出解。
怎麼求極大獨立集,以及怎麼對於每一個不在\(S\)中的點求其在\(S\)中的相鄰點呢?先考慮前一個問題,即當前存在一個數集,每次嘗試加入一個數,須要判斷加入的數是否和原數集中的全部數都不互質。根據\(\sum_{d|n}\mu(d)=[n=1]\),能夠維護一個數組\(sum_i\),每次加入一個數\(x\)就對\(x\)的全部約數\(d\)進行\(sum_d+=\mu(d)\),判斷\(x\)是否能夠加入,只要判斷\(\sum_{d|x}\mu(d)\)是否爲\(0\)就好了。
這樣能夠解決第一個子問題。第二個子問題能夠在這種作法的基礎上加上總體二分,因爲\(10^7\)內一個數\(\mu(d)\neq0\)的約數\(d\)至多\(2^8\)個,由於總時間複雜度\(O(n2^8\log n)\)。
上午找數學組老鴿們學習了伯努利數求天然數冪和。
定義伯努利數的生成函數爲\(B(x)=\sum_{i\ge0}\frac{B_i}{i!}x^i=\frac{x}{e^x-1}\)。
考慮設天然數冪和的指數生成函數\(A_n(x)=\sum_{i\ge0}(\sum_{j=0}^nj^i)\frac{x^i}{i!}\),則\[A_n(x)=\sum_{j=0}^n\sum_{i\ge0}\frac{(jx)^i}{i!}\\=\sum_{j=0}^ne^{jx}\\=\frac{1-e^{(n+1)x}}{1-e^x}\\=B(x)\frac{e^{(n+1)x}-1}{x}\\=B(x)(\sum_{i\ge0}\frac{(n+1)^{i+1}}{(i+1)!}x^i)\]
因而\(k!A_n(x)[x^k]=\frac{1}{k+1}\sum_{i=0}^k\binom{k+1}{i}B_i(n+1)^{k+1-i}\)
伯努利數能夠多項式求逆\(O(n\log n)\)求得。而後要求\(A_n(x)\)也只須要一次卷積。
定義\(S_k(x)=\sum_{i=0}^xi^k\),求多項式\(\sum_{k=0}^nS_k(x)a_k\)。\(n\le250000\),係數對\(998244353\)取模。
\[\sum_{k=0}^nS_k(x)a_k=\sum_{k=0}^n\frac{1}{k+1}\sum_{i=1}^{k+1}\binom{k+1}{i}B_{k+1-i}(x+1)^i\\=\sum_{i=1}^{n+1}(x+1)^i\sum_{k=i-1}^n\binom{k+1}{i}\frac{a_k}{k+1}B_{k+1-i}\]
令\(C_i=\sum_{k=i-1}^n\binom{k+1}{i}\frac{a_k}{k+1}B_{k+1-i}\),則求出伯努利數後只需一次卷積便可求出\(C_i\),以後再使用二項式定理展開\((x+1)^i\)便可。
昨晚vp了一場2018 Chinese Multi-University Training, Nanjing U Contest然而寫了兩個小時就跑路了。今天早上過來補了幾個題。題解懶得寫了。
晚上打了場小米 Online Judge TCO 預選賽,又墊底了。
給一個\(n\times n\)的矩陣\(A\),定義一個非空子矩陣\(B\)的補矩陣爲原矩陣去掉\(B\)所在行列後剩下的矩陣。求在模\(P\)(一個質數)意義下有多少個正方形矩陣\(B\)知足其補矩陣非空且\(B\)與\(B\)的補矩陣均滿秩。\(n\le40\)
複雜度看上去是\(O(n^5)\)的,然而貌似\(O(n^6)\)卡卡常就過了。
先枚舉\([l,r]\subseteq[1,n]\),即枚舉\(B\)所在的行區間,接下來可行的\(B\)就只有\(n-r+l\)個。依次考慮判斷這\(n-r+l\)個矩陣\(B\)是否滿秩,順序枚舉,能夠發現相鄰的兩個矩陣\(B\)的差異僅爲替換了一個行向量,那麼使用帶刪除線性基便可作到單次\(O(n^2)\)插入刪除,總複雜度\(O(n^5)\)。
教練我不想寫帶刪除線性基怎麼辦?
由於是按順序插入與刪除的(相似隊列,每次操做恰在隊首刪除,隊尾加入),所以能夠對於每一個行向量維護其被插入線性基的時間,每次新插入向量時,儘可能將原有線性基內向量替換爲更新插入的向量(比較插入時間),於是在判斷是否滿秩時,只須要判斷構成線性基的\(r\)個行向量是否是最近插入的\(r\)個便可。複雜度依然爲\(O(n^5)\)。
NCEE 2019 Day 1
Good Luck & Have Fun !
Codeforces Round #564 (Div. 1)棄療了沒打,不過感受打了就上分了啊。
NCEE 2019 Day 2
Good Luck & Have Fun !
去JUNE Challenge 2019 Division 2玩了玩寫了幾個題。
Q:爲何打Division 2?
A:由於Rating不夠打Division 1 \(Q\omega Q\)
to be continued...