題解合集(NOIP2018賽前集訓)

每天做的題的題解都扔上來,以後好複習

10.22

jzoj5919:
找出所有環,拿出左右端點,set維護r[i]表示以i作爲左端點時右端點最右是多少,二分統計答案
jzoj5920:
先求出兩個數組start,end.start[i]表示以i爲開頭的LIS,end[i]表示以i爲結尾的LIS.一個結論:如果一個數存在於多個LIS中,那麼它的排名是一樣的,如果start[i] + end[i] == K + 1(K 爲最長LIS長度),那麼這個a[i]在LIS中.之後討論一下,有主席樹和離線樹狀數組兩種方法,我比較蠢,寫了主席樹(不會離線 ).

10.23

jzoj5922:
結論:一個數列[l…r]及k,使a[i] += Ci+klkC_{i+k-l}^k等價於使[l…r]{初值均爲1}前綴和k次.
知道結論後就好做了,由於k的範圍很小,可以分成k個序列來差分,從大的往小的做,每次差分完注意減去影響.
jzoj5923:
關於圖的連通性的DP,一般分成三種情況.
連通情況+不連通情況==所有情況.
處理完就好做了

10.24

jzoj5924:
分塊之後直接雙端隊列維護就好了
STL:deque是雙端隊列

10.25

jzoj5925:
注意一個結論,就是一個點的顏色最多隻會改變兩次.
所以可以考慮DP,設f[i]表示[1…i]變爲同一種顏色的最小代價,預處理每個區間的Min和全部變爲Min的Cost即可.注意爲了保證有一個目標顏色,所以從後往前也做一遍.
n3n^3是可以接受的
jzoj5926:
tmd比賽的時候竟然沒想到.
把邊權從小到大排序,然後對於一條邊,它的貢獻就是兩個連通塊之間符合條件的點對數,用啓發式合併和權值線段樹即可log2log^2做到.
注意離散化.

10.26

jzoj5928:
打表找規律可以發現總和是這個式子
i=1ni2i1(2+2n)\sum_{i=1}^{n}{i * 2^{i-1}} *(2+2^n)
其中i=1ni2i1=i=1n2i1+i=2n2i1+i=3n2i1\sum_{i=1}^{n}{i * 2^{i-1}} =\sum_{i=1}^{n}{2^{i-1}} + \sum_{i=2}^{n}{2^{i-1}} +\sum_{i=3}^{n}{2^{i-1}}\cdots
換下形式,最後搞出來這個
[(n1)2n+1](2+2n)[(n-1)*2^n+1]*(2+2^n)
這可以用快速冪計算,最後乘下逆元即可
jzoj5930:
顯然因爲質因子間影響是獨立的,所以考慮質因子分開來做.
先把所有aia_i拆成質因子形式,詢問也一樣.
現在考慮如何解決那個K的限制.
考慮子孫對祖先的影響,顯然一個節點只會對它K級父親以內有影響,於是對於一個節點,我們在它自己處打+標記,在K級父親處打-標記.(結合dfs序想想)
現在考慮如何統計答案.
顯然對於同一個質因子,qiq_i的指數和aia_i的指數我們需要取個min.
顯然可以排序,從前往後做的時候用兩個樹狀數組維護一下.(注意是在dfs序上做)
一個表示指數較小的,記錄總和;一個表示指數較大的,記錄個數.
注意每次之後由於操作可逆性,我們將操作逆回去清空樹狀數組.
由於質因子不超過n8n*8個,所以複雜度
O(8nlogn)O(8 * nlogn)(常數略大)

10.27

jzoj5931:
遞推,很好理解,直接扔式子
fif_i表示n=in=i時的sumsum
fi=fi1+fi1i!(i1)!(i1)!+i!(i1)!f_i=f_{i-1}+f_{i-1}*\frac{i! -(i-1)!}{(i-1)!}+i!-(i-1)!
O(n)預處理
jzoj5932:
Bitset牛逼
對於每個點寬搜,設f[i][j]f[i][j]表示第i個點j步以內能到達的點,用bitset搞.
沒了
jzoj5933:
由於修改只在一邊,倒着建主席樹就沒了.
我咋就沒想過倒着建,cao.

10.29

jzoj5934:
網絡流模板題,對於每個限制連一條INF,橫縱座標分別向S,T連1,最小割即可.
jzoj5935:
送分題,區間DP,考場上切了就不多說了.
jzoj5936:
https://blog.csdn.net/P_hillipe/article/details/83550433

10.30

jzoj5937:
貪心,考場上切了就不多說了.
jzoj5938:
首先兩個塊的形狀肯定是階梯型的
考慮極值的性質,顯然兩個塊的極值的一端一定會包括最大和最小,所以二分出答案後,兩個塊的權值區間肯定在[mi..mi+K][mi..mi+K],[mxK..mx][mx-K..mx]當中.
可以分4種情況貪心解決

11.01

jzoj5941:由於bb的值域只有101210^{12},所以直接預處理冪次即可,後續可以O(1)O(1)計算.
jzoj5942:由於andand操作值最多變小loglog次,維護一下每個區間的序列或去判斷,每次暴力修改.對於33操作可以拆開,發現維護平方和就好.
jzoj5943:有一個結論就是信標只會在葉子上,隨便選一個度數大於22的點爲根,可以證明這個根一定不會放信標.隨後貪心的做,一個節點設有cc個兒子,則必須在其中至少c1c-1個兒子的子樹中放信標.

11.02

jzoj5945:求均攤紙牌的方案數,求出每個點左邊需要多少紙牌,右邊需要多少紙牌,隨後根據平均值分類討論即可.
jzoj5946:
轉化題意後變爲找循環節,有個定理.
pp是質數且ak1(mod p)a^k \equiv 1(mod\ p),則kpk | p.
然後這題就暴力枚舉kk就好了.
jzoj5947:注意到逆序對個數肯定不超過n2n^2,所以每次操作暴力交換區間內的相鄰逆序對,每次交換是loglog的,所以複雜度是O((n2+m)logn)O((n^2+m)log_n)

11.03

jzoj5948:每個長度爲LL的段的sumsum取最小值即是答案.
jzoj5396:轉化題意後變成,找出一個最長的子序列使得序列平均值大於給定的kk.

11.04

jzoj5949:答案:n(n1)2m\frac{n * (n - 1)}{2 *m}
jzoj5950:單調棧維護一個上凸殼即可,每次維護完後答案就是棧頂.
jzoj5951:不寫了,吼難.

11.05

jzoj5952:設bib_i爲從11ii的異或和,預處理一個fif_i表示 bj& i== i\ b_j \& \ i==\ i的最左的jj.每次按位貪心,注意到若bib_i某一位爲1,那麼對答案貢獻僅爲1,若某一位爲0,對答案的貢獻就是0或2.用剛剛處理的ff數組維護計算即可.
jzoj5953:有定理,原點集重心肯定是對稱中心.那些原本就關於對稱中心的點先刪去,若剩下的點<=2<=2就肯定爲1-1.注意到一條直線能包含所有nn個點,顯然要出現n/2n/2次,由於這樣的直線不超過nn條,所以暴力做就可以.
jzoj5954:太長了不寫了,去看Howarli的博客.原題[UOJ 351]新年的葉子.

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