原创 CF1869C Fill in the Matrix

Link 首先想一下,如果又一列的 \(MEX\) 是 \(n\) 會有什麼樣的要求?需要這一樣有 \(0~n-1\) 的所有數字並且沒有\(n\) 當我們知道這一點以後問題就很好解決了. 我們應該構造數列的時候,滿足第一行的\(MEX\)

原创 CF 1867 E1. Salyg1n and Array (simple version)

Link 簡單版本的結論還是很容易猜到的。 首先很容易想到的第一步就是儘可能地不覆蓋地取儘可能多地區間,最後剩下了一小塊。 然後在接着原來的指針一個一個地往右問,直到不能問了爲止。 爲什麼這樣是正確的呢?首先,在這樣一步一步地往右查詢的過程

原创 牛客周賽 Round 12 D 小美的區間異或和

Link 首先這個題目的限制卡的很死,最好是O(n)解決,其次當看到異或的時候,就可以考慮按照二進制位進行計算。 對於這個題,我們定義\(dp_i\)表示以\(a_i\)爲最右端的子區間的答案的和 那麼首先可以想到,貢獻給這個答案的有兩個部

原创 CF1867D Cyclic Operations

事實上我們可以發現,如果\(b_i=x\)最後,那麼我們可以連一條邊,從\(i\)到\(x\) 這樣我們就得到了一個有向圖,在這張有向圖呢,可以證明的是 如果\(k=1\),那麼必須全部都是自環。 若不成立,則必須每個環的大小恰好爲\(k\

原创 P4071 [SDOI2016] 排列計數

LLink 顯然的,答案就是\(C_n^m*D_{n-m}\) #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath

原创 P2638 安全系統

LLink 本代碼沒有高精。 首先很容易想到的是,0,1之間互相併不干擾,所以說我們只要分開算0和1的方案數乘起來就可以了。 那麼怎麼算方案數呢? 首先可以想到的一點就是,如果我們確定了要放\(a\)個1的話,只要採用隔板法就可以確定了方案

原创 P6464 [傳智杯 #2 決賽] 傳送門

link 首先我們要明白,floyed的本質上是一個dp,那麼顯然我們要先跑一邊floyed,然後進行更新 當我們更新的兩個點之間的距離的時候,顯然我們改變的是和它們有關的距離,所以只要更新這兩個邊就可以了. #include<cstdio

原创 CF1872

Link A Two Vessels 十分甚至九分地簡單 #include<bits/stdc++.h> using namespace std; int t; int a,b,c; int main(){ scanf("%d",&t);

原创 B. Longest Divisors Interval

link 需要思考一下 如果這個題能做,那麼肯定有一種比較可行的做法。 如果\([l,r]\)是可行的,那麼就意味着\([1,r-l+1]\)是可行的 這是顯然的,顯然後者的每一個數在前者中必然有對應的倍數,所以等效。 這樣從1開始找就行了

原创 C1. Dual (Easy Version)

link 像這種構造題可以先分類討論一波 比如說全是正數或者全是負數,那麼顯然的就是可以用前綴和和後綴和來解決。 而如果有正有負呢?可以注意到的是數字非常小,而\(2^5=32>20\)了,那麼我們就可以先隨便找到一個正數,把他自加上5次,

原创 CF1849C Binary String Copying

Link 我們想一下,什麼時候兩種變換是相同的 或者說,這意味着什麼。 本題目有特殊性,特殊性就在於只有0和1 對於每一個被改變的區間\([L_i,r_I]\),從\(l_i\)開始的那一堆0,和從\(r_i\)開始的那一堆1都沒變。 所以

原创 CF1851 A-G

link A 非常簡單的比較大小問題 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<qu

原创 CF1853C Ntarsis' Set

Miku 一道逆向思維的題目。 我們假設最後的最小的數是個1,放在第一個位置上,然後我們往數列開頭按照規則插入0,其中應該插在這個1後面的,我們視爲無效插入,插在這個1前面的,我們視爲有效插入。 顯然隨着這個1的後退,每一次有效插入的0越來

原创 E - Defect-free Squares

Linkkkkkkkkkkkk 這其實是個dp問題 可以拆成一個個dp小問題,然後求和,這個小問題就是以\((i,j)\)爲右下角方塊下會有多少矩形,然後把每一個位置加起來就行了。 應注意到以下命題充要性成立:如果\((i,j)\)位置存在

原创 P1253 扶蘇的問題

link 非常直白的線段樹題目 要注意負數的問題以及吮吸 #include<iostream> #include<cstring> #include<cstdio> #define int long long using namespace