原创 [ZROJ-955]摺紙 Solution

題意: 給一個字符矩陣,行列都可以摺疊,要求是摺疊線的兩邊對稱,摺疊線上不能有字符。如111111摺疊後可以變成111。 考慮manachermanachermanacher?首先我們考慮一下n=1n=1n=1的時候怎麼計算答案?

原创 [CF316E3]Summer Homework Solution

題目描述:給你一個序列,實現以下操作: 單點修改:a[i]←xa[i]←xa[i]←x 區間查詢∑i=0r−lf[i]×a[i+l]\sum_{i=0}^{r-l}f[i]\times a[i+l]∑i=0r−l​f[i]×a[

原创 [ZROJ-954]分組 Solution

題意: 給n個人,每個人有自己的意願以及工作經驗,111表示能當組長,222表示能當組員,333表示既能當組長又能當組員,並且有僱傭他的花費,現在需要將這些人分成kkk組,每組222個人,2×k≤n2\times k\leq n2

原创 [CF1152E]Neko and Flashback Solution

題意: 有一個原始序列aaa,現在構造一些序列: 構造長度爲n−1n-1n−1的bbb序列,滿足b[i]=min⁡(a[i],a[i+1])b[i]=\min(a[i],a[i+1])b[i]=min(a[i],a[i+1])

原创 [雜題]color Solution

題意:給一棵樹,每個點有一個名字,有若干個詢問,每次詢問給出xxx,yyy,表示xxx子樹中與之深度差爲yyy的點的個數,如果點名字相同則只計算一次。 dsu on treedsu~on~treedsu on tree 用mapm

原创 [BZOJ3289]Mato的文件管理 Solution

題意:給一個序列,若干個詢問,每次詢問一個區間的逆序對個數。 考慮數據範圍很小,就可以使用莫隊,如何計算擴展的一個點的貢獻?用樹狀數組維護即可。 code:code:code: #include <bits/stdc++.h> #

原创 [ZJOI2013]K大數查詢 Solution

題意:給nnn個集合,最開始都爲空集。 有kkk個操作,操作111:每次在l−rl-rl−r這些集合裏面都加入一個數;操作222:查詢l−rl-rl−r這些集合的並集中的xxx大的值。 考慮整體二分。 把所有操作都離線下來。 對於

原创 [BZOJ3744]Gty的妹子序列 Solution

題意:給一個序列,有若干個詢問,每次詢問一個區間的逆序對個數,強制在線。 考慮分塊,求出從第一塊到任意塊之間的逆序對數,再求出從第一塊到任意塊之間小於等於一個數的個數。然後的答案就可以很方便的計算出來,對於整塊之間的,已經計算完畢

原创 [ZROJ-958]散步 Solution

給你nnn個點,每個點有兩種邊,AAA和BBB,給出所有點AAA邊連向哪個點以及BBB邊連向哪個點,(每個點往外只能連一條AAA和一條BBB)找到一條從111到nnn的路徑,使得:這條路徑上連續經過的AAA路徑或者BBB路徑最長長

原创 [雜題]queen Solution

題意:在n×mn\times mn×m的矩陣上面放kkk個皇后使得所有皇后都能互相攻擊。不同於正常打法的一點是這裏面的皇后能無視阻擋攻擊。 這裏面的n,mn,mn,m和kkk的範圍都極大無比,不可能考慮枚舉。 考慮到一個皇后瞄準的

原创 [ZJOI 2016]旅行者 Solution

題意:給一個矩陣,QQQ個詢問,每次詢問兩點最短路。 考慮最暴力的做法,每次直接暴力跑最短路,然後計算答案。這樣的不足之處顯然在於最短路上面,那麼如何優化這個過程? 考慮計算所有的答案。 也就是分治,每次選擇一條邊,將它切開,考慮

原创 [USACO07OPEN]喫飯Dining Solution

有FFF種食物和DDD種飲料,每種食物或飲料只能供一頭牛享用,且每頭牛隻享用一種食物和一種飲料。現在有nnn頭牛,每頭牛都有自己喜歡的食物種類列表和飲料種類列表,問最多能使幾頭牛同時享用到自己喜歡的食物和飲料。(1≤f≤100,1

原创 [NOIP2016 Day2 T3]憤怒的小鳥 Solution

題意:二維平面上有nnn個點,現在需要用最少的形如ax2+bxax^2+bxax2+bx拋物線去完全覆蓋這些點。 首先預處理出來如果攻擊這兩個點能消滅的所有點的集合。表示爲kill[i][j]kill[i][j]kill[i][j

原创 [NOIP2018 Day1 T3]賽道修建 Solution

題意:給一棵樹,現在要從上面劃出mmm條互不相交的鏈(指邊不能共用),問這些鏈中長度最短的最長可以達到多少。 最短最長沒什麼好說的了,考慮二分。 考慮如何判定? 使用貪心。 給每個點都開一個multisetmultisetmult

原创 [SDOI2017]數字表格 Solution

題意:定義矩陣內每個位置(i,j)(i,j)(i,j)的數爲gcd⁡(i,j)\gcd(i,j)gcd(i,j),求矩陣內所有數的乘積。 ∏k=1nFk∑i=1n∑j=1m[gcd⁡(i,j)=k] \prod^{n}_{k=1}