Team 馬上就要被樓下超過了 訓練記錄

Team members

BiuBiuBiu
Walker
Forever_Cloud

To Do List


Team 解散啦!


Caution


博弈題或者數學題遇事不決上來先打表
輸出字符大小寫檢驗
題意必須完全讀懂再上去寫代碼
其他人有思路的代碼ffx完成代碼後應該讓有思路的那個人檢查


Contest




20162017-acmicpc-neerc-central-subregional-contest
A Fried Fish (簽到) 84 / 304
B Hanoi tower (推公式) 12 / 48(賽後過掉)
C Desktop (構造) 16 / 71 (賽後過掉)
D Weather Station (簽到) 66 / 104
E Cupcakes (推公式) 24 / 99
F Vitamins (並查集暴力) 12 / 47(賽後過掉)
G Sphenic numbers(簽到) 82 / 270
H Non-random numbers(腦洞題) 69 / 100
I Land Division 4 / 19
J Architect of Your Own Fortune(二分圖) 31 / 67
K Polymorphic code 0/0

過程:開局由於ffx不知道cf需要文件讀入wa1很久,後來發現了交了A,又wa了,有個小細節沒改改了就過了
這個時候ffx也碼完了DG,G交上去1A了,Dwa3,wk看代碼發現少個細節,加了就過了,這個時候sbw說了一下h的題意,ffx發現大於10直接加0,於是寫了個暴力0-9就1A了,這個時候sbw推出了B的公式(但是後來發現是錯的),由於需要高精度,ffx掏出java寫完發現不會文件讀入,這個時候wk發現J是個很sb的二分圖,於是ffx建圖,wk寫了個二分圖就合力把J過了,之後全體看E,ffx猜了一下需要分成兩股力量去討論,然後wk和sbw分別推出做法,由於ffx數學sb就去看c了,wk上機敲了一下wa1,後來發現是(yes大小寫的問題,不然是wa12),最後ffx敲了sbw的思路,wa3了,後來發現是有個小地方着急寫錯了,改了就過了,於是這場就結束了。
題解
ADGH:sb題
B:需要理解題意是要在完整的漢諾塔移動過程中尋找3柱數目相等的第一個狀態,然後理解一下漢諾塔移動的規則,分奇偶看一下發現在偶數的時候第一個相等的狀態是先移動(2/3)n-1片到一個柱子B上,然後移動第2/3n片到C柱,接着把B柱上面的1/3*n-1片移動過去就可以了,奇數的時候第一個相等的狀態是先移動(2/3)n-1片到B柱子上,然後移動第2/3n片到C柱,然後將B柱最上方的(1/3)n片移動到C柱上(這裏需要都多移動一個棋子,因爲所求是在移動整個漢諾塔的過程中出現各柱相同的情況。舉例子總共有9片,當移動完前5片在b柱上之後,將第六片移動到c柱,此時移動b柱上的片,正常情況下不會出現1,2片出現在c柱的情況,而是1,2片在a柱上,3在c柱上,所以必須移動b柱上的1,2,3個片纔會出現2,3片在c柱上,1片在b柱上,此時各個柱子都是有3個)
https://paste.ubuntu.com/p/f2fdqZNQRP/
C:分奇偶情況討論,將奇數情況轉化爲偶數情況,這類題都要想出一個肯定正確的狀態,然後把不確定的狀態轉換爲這個肯定正確的狀態
https://paste.ubuntu.com/p/SXqVdhTZKT/
E:一個類似博弈的推公式,分別計算每一段必勝態存在區間的最小值和最大值,然後判斷給定的蛋糕數是不是在段必勝態之間即可
https://paste.ubuntu.com/p/ctqxgFbB5M/
F:並查集加暴力枚舉;因爲只有1000個點可以用n^2的算法過題。因爲會有=號的存在,所以會有一種情況1>2,3>4,2=3.這種情況下,必須要將2,3合併在一起才能知道所有點的關係。而將所有同層次的點連接在一起的一個方法就是並查集,所以首先掃描所有的邊將=號相連的兩個點放入並查集中,然後再掃描一遍所有邊,將此邊連接在兩個端點的祖先節點上,這樣就能將分散的邊集中在一起。然後掃描一遍所有點,將有父節點,且有根節點的點的祖先節點的等級標記爲1,然後將兒子節點的祖先節點等級標記爲2,同理父親爲0.最後再掃描一邊所有點,看本店的祖先節點的等級是什麼,然後由等級輸出wrs,0對應w。
https://paste.ubuntu.com/p/mpqW59jMkR/
J:一個裸的二分圖,首先將所有車票記錄下來,然後A車票的前三位記錄爲num1[i][0],後三位爲num1[i][1],T車票同樣記錄下來,然後n^2掃點,如果a車票的前三位等於t車票的後三位,t車票的前三位等於a車票的後三位,這樣就將i向j連邊,這樣圖建好後,跑一邊匈牙利算法,就能得到最大匹配,然後根據linker[v](t車票跟哪個a車票相連),輸出相應的兩個車票序號。
https://paste.ubuntu.com/p/ZShYwk7zSC/




ICPC2016大連
A UVALive 7723 Wrestling Match(帶權並查集) 325 / 1045
B UVALive 7724 Regular Number(shift-and算法) 34 / 296(賽後過掉)
C UVALive 7725 Game of Taking Stones(java二分) 65 / 328(賽後過掉)
D UVALive 7726 A Simple Math Problem(推公式) 363 / 1339
E UVALive 7727 Aninteresting game(樹狀數組原理考察) 51 / 196(賽後過掉)
F UVALive 7728 Detachment (推公式) ** 242 / 878 **
G UVALive 7729 Garden of Eden(點分治) ** 82 / 304**(賽後過掉)
H UVALive 7730 To begin or not to begin(簽到) **487 / 739 **
I UVALive 7731 Convex(簽到)483 / 653
J UVALive 7732 Find Small A(簽到) 479 / 952
K UVALive 7733 Guess the number 31 / 117
**過程:**這場打的很坎坷,因爲前期A了HI之後一直卡在J題,由於想投機取巧導致位運算出錯,卡了特別久之後才過掉,過一會wk和ffx推出了D的正解,但是一直wa,後來試了一下交換兩個數的輸出順序,就過了,感覺現場賽應該會說明這點,題面真的沒有說!之後wk發現A是一個並查集,於是上機敲,ffx和sbw搞F,sbw發現可以轉換爲一段一段的操作來做,於是兩個人分別推出了公式,這時候wk由於有個題意沒太讀懂wa了一發A,在wk找bug的過程中,ffx上去敲了F,1A了,下來之後又讀了一遍A,發現有一個地方可以理解成兩種題意,於是wk按照第二種題意加了特判,就把A過掉了,之後開G,由於兩個人都沒怎麼寫過兩邊樹形dp的這種題,GG了
題解:
HIJ:sb題(J題注意2^8=256 ==||)
A:帶權並查集
因爲本題目只有兩種狀態,不是好就是壞。所以總的狀態就只有0,1兩種。
find函數回溯的時候sum[x]=(sum[x]+sum[t])%2,t是x的初始祖先節點;
在加入並查集時,fx=find
(x),fy=find_(y),當fx!=fy時sum[fy]=(sum[x]-sum[y]+1+2)%2;
當相同時需要判斷是否符合sum[x]!=sum[y],不符合說明有陣營不明確的人
另外本題還有一個注意點,有些並查集只有自己一個節點,這種情況下也是
不明確的人,所以需要用cnt數組記錄每個並查集中節點數目。
最後一個注意點,有可能是加入並查集沒有錯誤,但是最後可能一個並查集中
有些點在好的陣營中,另外在壞的陣營中,需要將這種情況排除掉
https://paste.ubuntu.com/p/rBtqr2JWD7/
G:點分治算法
問你有多少對(u,v),使得在此路徑上的種類數有k個
點分治就是基於樹上的節點進行分治。
點分治的本質其實是將一棵樹拆分成許多棵子樹處理,並不斷進行。
這其中有兩個部分是不變的,一個是計算重心,一個是對子樹進行路徑的計算或者記錄狀態
剩下的就是在總的dfs下,計算通過當前根節點的路徑上的信息(一般計數題目是總體計算然後剪去合併的衝突項,有些問滿足條件的最長路徑是遍歷過程中不斷尋找最大值)
本題目一個注意點就是在計算當前子樹的滿足條件的路徑數時,爲了降低複雜度
用下面這種方式,其實s0=(s0-1)&sta[i],這個操作可以實現對sta[i]的1的遍歷
比如與10010或等於11111的最小的數時1101,然後是1111,之後是11101,最後是11111
實際模擬一遍就知道怎麼回事了
https://paste.ubuntu.com/p/2dxdYph2zX/

for(int s0=sta[i];s0;s0=(s0-1)&sta[i])  res+=cou[((1<<k)-1)^s0];

D:推公式
題目給出兩個等式:
X+Y=AX+Y=A
LCM(X,Y)=BLCM(X,Y)=B
我們可以看出A,B的GCD也就是X,Y的GCD
我們首先讓兩個等式同時除以GCD(A,B)GCD(A,B)
便得到:
X1+Y1=A/GCD(A,B)X1+Y1=A/GCD(A,B)
X1Y1=B/GCD(A,B)X1*Y1=B/GCD(A,B)
X1GCD(A,B)=X,Y1GCD(A,B)=YX1*GCD(A,B)=X,Y1*GCD(A,B)=Y
解方程求出X1,Y1,乘以GCD(A,B)即可
https://paste.ubuntu.com/p/3CJP22CBt8/
C.高精度
威佐夫博弈只要滿足
(5+1)2(MaxMin)=Min \frac{\left( \sqrt{5}+1 \right)}{2}*\left( Max-Min \right) =Min
所以只要大數+java二分高精度求出5\sqrt{5}就可以了。
https://paste.ubuntu.com/p/twsbyFXPJT/
E.樹狀數組
首先我們要深刻理解樹狀數組的內部原理
我們先來看一下每個數的二進制碼和它們對應的lowbit
樹狀數組原理
1.lowbit(i)表示i能整除的最大的2的冪次
2.i-lowbit(i)表示跳到前一個整冪次的二進制區間
3.i+lowbit(i)表示跳到下一個包含當前區間的區間
如果知道這三個性質,
我們先來看第一問,求某兩段之間的lowbit之和,
我們首先求出sum(1,i1)sum(1,i-1)再求出sum(1,j)sum(1,j),前綴和相減就可以了
現在問題變爲如何求出sum(1n)sum(1-n),我們來看性質1,我們發現我們只要知道
有多少恰好只能整除1的
有多少恰好只能整除2的
有多少恰好只能整除4的…
我們可以發現恰好整除1個數爲[n/1n/2][n/1-n/2]向下取整
因爲能夠整除1的只包含恰好整除1的和能夠整除2的
以此類推,我們就可以o(1)的計算出所有2的冪次的貢獻,之後就掃一遍算貢獻就可以了
單次複雜度是log的
再來看第二問,問某個數被加過幾次,想想樹狀數組的add函數,這個問題就不難想了,每個數字只會在包含他的區間被重新添加,我們只要觀察性質三,就很容易算出第二問了!於是整個題就解決了。
https://paste.ubuntu.com/p/dTQsG8mfNh/
F.推公式
本題題意就是讓一個數拆成多個數之和,而且這些數的乘積最大,我們知道當我們拆的數越多,乘積就越大,然題意要求每個數不重複,所以我們要讓這些數儘量靠近,分下面兩種情況
1.X=Σi=2niX=9=2+3+4.2i,1. X=\varSigma _{i=2}^{n}i 例如X=9=2+3+4.此時肯定拆分爲2-i,爲最大飽和狀態
2.X=Σi=2ni+k(k&lt;=n)Kn2+1 2.X=\varSigma _{i=2}^{n}i+k\left( k&lt;=n \right) 對於多出來的K,我們能想到肯定是從n到2每個不斷+1,這樣才能保證這些數足夠靠近。
根據以上兩種情況我們列出等式
X=(2+n)(n1)2nnk(n+1)(n+0)...(nk+2)(nk)(nk1)...1 X=\frac{\left( 2+n \right) *\left( n-1 \right)}{2} n在這裏代表長度 解出n之後算出k,答案就是(n+1)*(n+0)*...*(n-k+2)*(n-k)*(n-k-1)*...*1 答案用兩個階層相除表示就可以了。
https://paste.ubuntu.com/p/PbSbmttPMK/
B.Shift-And算法
l如果你學過這個算法的話,那麼就是模板題。
Shift-And算法解決的就是每個位置可以放很多種字符時的字符串匹配問題
ans數組表示的是有哪些長度即是目標串後綴又是模式串前綴
求模式串在目標串中出現次數的時候
例如11001就代表當前串有長度爲1,4,5的串既是目標串後綴又是模式串前綴
所以如果我們想統計模式串出現次數,就是ans[len]=1時答案++;
所以這道題就可以用Shift-And算法結束了!
https://paste.ubuntu.com/p/5S6RNvSvYG/




ICPC2016瀋陽
A HDU 5948 Thickest Burger(簽到) 196 / 206
B HDU 5949 Relative atomic mass(簽到) 195 / 197
C HDU 5950 Recursive sequence(矩陣快速冪) 138 / 376
D HDU 5951 Winning an Auction 0 / 33
E HDU 5952 Counting Cliques(DFS) 118 / 602(賽後過掉)
F HDU 5953 Similar Rotations 0 / 1
G HDU 5954 Do not pour out 19 / 216
H HDU 5955 Guessing the Dice Roll(AC自動機+高斯消元+概率DP) 46 / 227(待補)
I HDU 5956 The Elder 29 / 191
J HDU 5957 Query on a graph 8 / 36
K HDU 5958 New Signal Decomposition 0 / 2
L HDU 5959 A Random Turn Connection Game 0 / 1
M HDU 5960 Subsequence 1 / 5
過程
這場算是隊伍訓練掛機時間最長的場,開場由於AB都是c語言題ffx就直接1A了,然後wk推出了B的轉移公式,ffx開始敲矩陣快速冪,由於板子錯了!!!導致卡了將近半個小時,過了C之後ffx想寫一發E的dfs暴力,wk感覺E可以bitset搞一下,由於ffx覺得自己的dfs跑的肯定很慢所以就放棄,讓wk上去敲,敲好之後發現bitset的做法處理不了某些情況是錯的,那時候時間已經剩的不多了,ffx上去敲自己的dfs也TLE了,於是這場就GG了,感覺以後還是要做法確定再上去敲,不然可能導致時間浪費過多。
題解
AB:SB題
C.矩陣快速冪
根據提議我們知道轉移矩陣爲
f[i]=2f[i2]+f[i1]+i4f[i]=2*f[i-2]+f[i-1]+i^4
前兩項很容易通過矩陣快速冪轉移,而後面就很麻煩,所以我們要看$i^4是否可以轉移

i4=(i1)4+4(i1)3+6(i1)2+4(i1)1+1 i^4=\left( i-1 \right) ^4+4*\left( i-1 \right) ^3+6*\left( i-1 \right) ^2+4*\left( i-1 \right) ^1+1

i3=(i1)3+3(i1)2+3(i1)1+1 i^3=\left( i-1 \right) ^3+3*\left( i-1 \right) ^2+3*\left( i-1 \right) ^1+1

i2=(i1)2+2(i1)1+1 i^2=\left( i-1 \right) ^2+2\left( i-1 \right) ^1+1
所以我們只要在轉移矩陣中將i4,i3,i2,i,1i^4,i^3,i^2,i,1也一起轉移就可以了
具體轉移矩陣如下這裏寫圖片描述
https://paste.ubuntu.com/p/ybcmW4kDPn/
D.dfs
這道題由於數據量只有100,所以可以大力爆搜,對每個點去搜一下這個點能構成的完全圖數量,搜索的時侯有一個當前點集,如果這個點能到達的點與當前點集內部的點都有邊,那麼就將下個點放入點集從下個點繼續搜下去,當點集內的點數量等於k,則更新答案,但是這樣搜索我們發現每種完全圖都被重複搜索了k!次,爲了避免這種情況,我們可以將無向圖建爲有向圖,這樣只要沿着有向圖跑,每種完全圖最多被統計一次,這就是無向圖統計某種圖時建立單向邊從而減少多次統計一個圖的情況。
https://paste.ubuntu.com/p/ngQGzygRMC/




CCPC2016杭州
A HDU 5933 ArcSoft’s Office Rearrangement(模擬題) **163 / 509 **
B HDU 5934 Bomb(tarjan) **112 / 375 **
C HDU 5935 Car(貪心) **156 / 660 **
D HDU 5936 Difference(折半暴力) **37 / 304 **(賽後過掉)
E HDU 5937 Equation(dfs) **25 / 64 ** (賽後過掉)
F HDU 5938 Four Operations(貪心) **171 / 513 **
G HDU 5939 Game of Eliminate **4 / 62 **
H HDU 5940 Hazy String **0 / 3 **
I HDU 5941 Inequality **3 / 39 **
J HDU 5942 Just a Math Problem **7 / 23 **
K HDU 5943 Kingdom of Obsession(二分圖) **72 / 776 **
過程
這場是第一次打這種前期爆炸後期翻盤的場,心情真的很好,開局由於A的模擬ffx一上來有個特判寫錯了,找了好久的bug也找不到,於是換了wk上來找bug,電腦分兩塊ffx在右面敲F,這時候wk找到了一個bug改了一下提交,又wa,時間已經一個多小時,全隊心情爆炸,之後ffx隨便想了一組A的樣例,發現有錯誤,原來wk找到bug之後特判的位置改錯了,又改了一下就過了,這時候ffx也敲完了F,submit,wrong anwser,返回查看代碼,怎麼算怎麼對,後來發現字符串長度要判一下,不然可能會非法訪問,改了之後ffx加了個初始化的ans,如果不滿足條件就不走第二種,但是由於當時沒想到答案會出現負數,又wa了,下來之後發現了這個問題,改了就過了,這時候已經rank107了,在ffx敲F的時候wk發現C是個貪心,於是F過了就上機開始敲,然後就1A了,交了之後rank變成了102,wk敲C的時候ffx和sbw推出了K的一些東西,ffx上機敲了K題,又是1A,rank75,ffx敲k的時候wk發現B是個做過的tarjan,改改就能過,於是ffx交了K之後wk上機開始抄板子,但是敲完之後發現樣例怎麼也過不去,開始了將近半小時的找bug之旅,找了半小時之後,ffx決定換個板子敲一下,ffx拿出自己以前的板子對比一下發現,wk的板子有個cnt寫錯了(由於wk將棧改爲手寫,之後忘記測試,導致板子出現問題,以後還是要注意一下),之後改掉了模板的錯誤,B也1A了,rank變爲52,已經滾到銀牌區了,由於三個人過於興奮,導致一個差不多做過同類型的D最後沒開出來,又滾回了銅首,不過也算是翻盤了,很是開心。
題解
A.F 細節模擬題
A.要注意之前都用光的時候是不需要消耗次數去合併的
F.要注意可能出現負數,可能串長不夠
A題代碼 https://paste.ubuntu.com/p/mnVMkYD9TV/
F題代碼 https://paste.ubuntu.com/p/jzXBfHkZt4/
B題tarjan
題意建模之後就是對一個有向圖並且每個點有權值的圖進行選點,要求最終的點集要能到達每個點而且點集的權值和最小,當弄懂題意之後就是一個裸的tarjan了,縮點之後在每個入度爲0的聯通塊裏面選一個最小的加入貢獻就可以了。
https://paste.ubuntu.com/p/Kxtdy86tFC/
C題貪心
從後往前貪心,由於要求每一段都是整數秒跑完,每一段都儘量保持一個很大的速度,如果這個速度大於當前區間長度,就把速度變爲當前區間長度/s,否則就看當前速度需要幾秒,如果是整數秒就直接取,如果不是整數秒就讓當前秒數+1,速度調成相應的速度。
https://paste.ubuntu.com/p/pWRbJJF7jh/
D題二分枚舉
我們能夠證出最終的長度是小於10的,這位時候我們發現情況太多,大概有10!種,當遇到這種去全排列會超時而分成兩半去排列不會超時的時候,就把原題分成兩半,分別存入數組,排序,遍歷第一個數組,然後查找第二個數組中滿足條件的結果數,(注意不要用map)。
https://paste.ubuntu.com/p/s2QBRFrKkY/
E.dfs
題意就是給你帶有1-9數字的塊,每個塊有a[i]個,給你無數個+無數個=,問最多用已有的塊湊出多少等式。1+2=3,2+1=3算兩種。
我們推一下發現只有32種等式,但是這樣枚舉每種等式是否選擇的時候2^32會超時,然後我們發現1+2=3,2+1=3,這兩種等式可以在一起向下遞歸,只不過一個是所有塊-2,另一個是-1,我們就把複雜度從Z2322^{32}變成了3203^{20},但是這樣還有可能不會AC,我們再將答案最大值優化加上,也就是就算後面全選都不會超過當前最大值,這樣的話我們就AC了,202ms。
https://paste.ubuntu.com/p/rJYnZyhsgk/
K題二分圖
我們可以知道當s數組中存在兩個質數的時候,肯定是不可以的,於是我們先本地打個表發現1e8之內兩個素數最大的差是200多,猜想一下1e9最多也就600,於是先將兩個數組相交的部分去掉,當s數組長度超過600是就是NO,否則對每個s數組能整除a數組的元素建立邊,跑一下二分圖看是否可以完全匹配就可以了。
https://paste.ubuntu.com/p/pd6zC9N6yY/



ICPC2016北京
A UVALive 7668 Harmonic Matrix Counter **3 / 19 **
B UVALive 7669 Binary Tree **1 / 14 **
C UVALive 7670 Asa’s Chess Problem **20 / 61 **
D UVALive 7671 What a Beautiful Lake(模擬題) **198 / 382 **
E UVALive 7672 What a Ridiculous Election(bfs) **123 / 647 **
F UVALive 7673 What a Simple Research(簽到題) **197 / 471 **
G UVALive 7674 A Triangle Puzzle **1 / 40 **
H UVALive 7675 A New Ground Heating Device **12 / 102 **
I UVALive 7676 A Boring Problem(二項式定理) **35 / 287 **(賽後過掉)
J UVALive 7677 Parrot **0 / 3 **
K UVALive 7678 JiLi Number(打表) **138 / 171 **

過程
這場開局ffx開了D題,發現是個水題,於是開始敲,敲了幾分鐘樣例過了,但是wk看了一下代碼發現ffx日提理解的不對,於是改了重寫,由於思路變了一下導致寫了好久,十多分鐘之後才過掉,之後wk開始敲D,還是由於題意翻譯的不夠清晰,導致wa了兩發,這是不應該的,後來看清楚題意改改就過了,之後sbw說了一下k題最多可能只有12位,發現樣例給的就是12位,在sbw推測第12位有幾個的時候,ffx開始本地打表,本地跑得飛快,就跑出了12位之內的全部答案,然後交上去就1A了,之後ffx發現E題可以bfs預處理一下,但是ffx好久不寫bfs,於是讓wk來寫,寫了一會之後過掉了樣例和ffx出的幾組數據,交上去,WA,看代碼發現有個for(i)套了個for(i),猜測會不會是這裏的問題,交上去,又WA,之後又發現初始點有問題,交上去又WA,於是三個人陷入了沉思,之後wk想到了先後關係那裏有問題,於是ffx說加一個二維的vis數組,之後wk加上了二維的vis,避免了之前的bug,就過掉了E,之後三個人接近掛機,I題想不到正解,決定放棄的情況下搜了I的題解,百度之後說是二項式分解,於是wk順着二項式分解的思路自己推導,一會就推出了,之後·ffx先幫wk預處理了一些東西,wk上去敲,wa了三發之後就過掉了。
題解
DF 細節題
E.BFS
題意是求12345通過三種操作達到某種序列的最短步數,而操作保證序列長度一定一直爲5,所以我們知道只有1e5種答案,bfs預處理一下就可以,但是這道題不能直接bfs,因爲不滿足直接bfs的條件,當前步數最少的到達此序列的,不一定是向之後其他序列轉移最優的,因爲這題三種操作中,後兩種操作具有次數限制,當用某些次數的後兩種操作到達某個序列時,這個序列可能不能繼續向後轉移,但實際上用更多步到達這個序列之後是有可能向後轉移的,所以我們需要多加二維,vis[i][j][k]表示第二種操作使用j次第三種操作使用k次到達i的最小花費,這樣就保證了到達當前狀態的最小花費是對之後沒有影響的。
E題代碼
K.本地打表
K題代碼
I.二項式定理

定義Sk數組爲S數組的前綴和數組, \text{定義}Sk\text{數組爲}S\text{數組的前綴和數組,}
F(j,i)=(Σil=jS[l])k=(Sk[i]Sk[j1])k=Σkn=0Ckn×(Sk[i])kn×(Sk[j1])n F\left( j,i \right) =\left( \underset{l=j}{\overset{i}{\varSigma}}S\left[ l \right] \right) ^k=\left( Sk\left[ i \right] -Sk\left[ j-1 \right] \right) ^k=\underset{n=0}{\overset{k}{\varSigma}}C_{k}^{n}\times \left( Sk\left[ i \right] \right) ^{k-n}\times \left( -Sk\left[ j-1 \right] \right) ^n
Σin=1F(n,i)=Ck0×(Sk[i])k×((Sk[0])0+(Sk[1])0+(Sk[2])0+....+(Sk[i1])0)+ \underset{n=1}{\overset{i}{\varSigma}}F\left( n,i \right) =C_{k}^{0}\times \left( Sk\left[ i \right] \right) ^k\times \left( \left( -Sk\left[ 0 \right] \right) ^0+\left( -Sk\left[ 1 \right] \right) ^0+\left( -Sk\left[ 2 \right] \right) ^0+....+\left( -Sk\left[ i-1 \right] \right) ^0 \right) +
Ck1×(Sk[i])k1×((Sk[0])1+(Sk[1])1+(Sk[2])1+...+(Sk[i1])1)+ C_{k}^{1}\times \left( Sk\left[ i \right] \right) ^{k-1}\times \left( \left( -Sk\left[ 0 \right] \right) ^1+\left( -Sk\left[ 1 \right] \right) ^1+\left( -Sk\left[ 2 \right] \right) ^1+...+\left( -Sk\left[ i-1 \right] \right) ^1 \right) +
....... .......
Ckk×(Sk[i])0×((Sk[0])k+(Sk[1])k+(Sk[2])k+...+(Sk[i1])k) C_{k}^{k}\times \left( Sk\left[ i \right] \right) ^0\times \left( \left( -Sk\left[ 0 \right] \right) ^k+\left( -Sk\left[ 1 \right] \right) ^k+\left( -Sk\left[ 2 \right] \right) ^k+...+\left( -Sk\left[ i-1 \right] \right) ^k \right)
定義SS[k]Sk數組的K次冪前綴和,則上述式變爲 \text{定義}SS\left[ k \right] \text{爲}Sk\text{數組的}K\text{次冪前綴和,則上述式變爲}
Σkn=0Ckn×(Sk[i])kn×(SS[i1])n \underset{n=0}{\overset{k}{\varSigma}}C_{k}^{n}\times \left( Sk\left[ i \right] \right) ^{k-n}\times \left( -SS\left[ i-1 \right] \right) ^n
所以只要預處理出Sk數組與SS數組這道題就在O(n,k)的時間複雜度內解決了。 \text{所以只要預處理出}Sk\text{數組與}SS\text{數組這道題就在O(n,k)的時間複雜度內解決了。}

I題代碼

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