集訓隊作業部分自選題


看這個進度,每天只要能做一道自選題應該就能在時限內完成了 = = 所以還是盡量不要看題解好了,看了題解的會標明

119 眾數MAX

假設我們枚舉眾數p,那么顯然答案就是$\max_p\{\sum_gmin(ca_g,cb_{p-g})\}$。

考慮分塊,對於$ca_g>S,cb_{p-g}>S$的我們暴力,小的fft。

實測取S=4跑的最快。

127 Ball

設$g=\sqrt{x^2+6x+1}$。

簡單計(mathe)算(matica)可知$f_n=\frac{2^{-1-n}}{g}(-(1+x-g)^{1+n}+(1+x+g)^{1+n})$。

那么就只缺一個ln、exp、sqrt板子了。測了測只有70,那我也沒有辦法…

120 Mike學OI(看了)

模板題,見另一篇文章。

130 Cow Coupons

如果買不到k頭牛,那么顯然是全用優惠券,先sort一下特判一下。

首先先把所有牛按Pi-Ci從小到大排序,那么肯定是有一個分界線,分界線左邊找若干個不用優惠券,右邊找k個用優惠券。

隨着分界線右移,右邊的花費會越來越大,從而左邊剩下的會越來越小,暴力維護即可。

128 Permutations(看了)

我發現我可能沒學清楚laplace展開…

首先顯然我們只要算行列式的奇偶性就可以了。

考慮改變一個元素之后行列式的變化,我們把行列式在那一行用laplace展開,類似這樣:

image

那么改變的就是這個位子的代數余子式。

那么我們只要求出每個位子的代數余子式,這個很簡單,只要求出逆矩陣之后/行列式就是伴隨矩陣了。由於行列式是奇數,mod 2之后也不用真的除。伴隨矩陣轉置一下就是余子矩陣了。01矩陣的逆矩陣直接高斯消元壓壓位就好。

131 Another Path

顯然從1開始的最短路樹唯一。為了方便敘述,我們把最短路反過來。

考慮從某個點a到1的another path,如果第一條邊是往這個點子樹外面走的,那么接下來顯然走最短路走到1最優。如果第一條邊是往子樹里面走的,那么不管在子樹里面怎么閑逛,總得走到子樹外面,接下來還是走最短路走到1最優,那么最優路徑顯然還是直接走到那條邊的子樹里面那端,然后走那條邊,然后走最短路到1。

那么我們對於一個點x連出去非樹邊(x,b),我們考慮x和b的lca,如果可以計入答案,那么就需要滿足a是x的祖先,並且a比lca深。貢獻就是dist[x]-dist[a]+len(x,b)+dist[b]。

這種東西隨便拿個dsu on tree+樹狀數組維護一下就好了。

134 Counting Divisors (square)

交了發洲閣篩,並不能過。杜教篩常數太大了,可能也不是很能過。我們考慮有沒有更加正經的$O(n^{\frac{2}{3}})$做法。

懶得再打一遍了,就截圖吧…

image

我覺得這題應該有復雜度更優秀的做法…

108 歐拉子圖(看了)

143 海蜇?海蜇!(看了)

123 tree

首先方差可以由和、平方和直接算出,這個相信大家都會。

由於(kx+b)^2=k^2x^2+2kbx+b^2,那么和、平方和都可以在線段樹上打標記維護。

我們只要解決樹剖這一部分就行了。

首先我們先考慮一下S是啥。

考慮把一條邊上面的點叫做上點,下面的點叫做下點。那么S(a,b)就是上點在a到b的路徑上的邊加上lca(a,b)的父親邊。

那么我們只要考慮如何維護上點在a到b的路徑上的邊。

考慮把重邊和輕邊分開維護,先分配所有重邊的編號,對於輕邊我們把一條重鏈上作為上點的輕邊一起分配編號,這樣就行了。

核心代碼大致如下:

int top[SZ],b1[SZ],e1[SZ];
void dfs2(int x,int t)
{
    top[x]=t; b1[x]=C+1; if(son[x]) ys[son[x]]=++C,
    rv[C]=son[x],ww[son[x]]=1,dfs2(son[x],t);
    for esb(x,e,b) if(b!=son[x]) dfs2(b,b); e1[x]=C;
}
int b2[SZ],s2[SZ],e2[SZ];
void dfs3(int x)
{
    b2[x]=C+1;
    for esb(x,e,b) if(b!=son[x])
        ys[b]=++C,rv[C]=b;
    s2[x]=C; if(son[x]) dfs3(son[x]);
    for esb(x,e,b)
        if(b!=son[x]) dfs3(b);
    e2[x]=C;
}

139 修牆(看了)

卡了一年常數才過。

135 func

由遞推式可以看出f(x+1)為把x分解為2的次冪,每個2的次冪用不超過2次的方案數。

回憶當時的dp:https://github.com/fjzzq2002/project-euler/blob/master/p169.py

n=10**25
f=[1,0]
for i in range(0,500)[::-1]:
    f[(n>>i)&1]=f[0]+f[1]
print f[0]

那么我們現在已知f[0],考慮枚舉f[1],倒着進行這個模擬,由於最后一步一定是f[0]=f[0]+f[1],那么f[1]<=f[0]。

枚舉之后每一步就是要么f[0]=f[0]+f[1],要么f[1]=f[0]+f[1],大減小即可。

這玩意兒復雜度不大對,那我們可以每次不相減,而是直接取模,復雜度就對了。

114 皇城PK

回憶關於遞推式的相關知識:http://l0nl1f3.leanote.com/post/BZOJ4161

那么我們可以發現我們要求的其實就是$(\sum_{i=1}^nx^{d_i})^k~mod~C(x)$,直接大力倍增求就好了。

大力優化了一波常數,還是只有70...先擱着吧,有空的時候補個mtt。

148 Simple Summation Problem(看了)

為啥這題能過一大片啊...大家數論技巧都這么高超的嗎...

注意到把原函數卷上$\mu$之后,因為$\mu(x^2)=0$,所以$G(p^d)=F(p^d)-F(p^{d-1})=p^{d-[d~mod~p]}-p^{d-1-[(d-1)~mod~p]}$。當d=1的時候G是0,所以只有每個質因子次數>=2 G才有值。

那么$\sum_{i=1}^nF(i)=\sum_{i=1}^n\sum_{j|i}G(j)=\sum_{i=1}^nG(i)\lfloor\frac{n}{i}\rfloor$,我們只要枚舉所有質因子次數>=2的i,直接算就行了。

我們考慮所有質因子次數>=2的i的個數,這就是<=n的powerful number的個數,是O($\sqrt{n}$)的,證明很簡單,考慮每個powerful number可以表示成a^2b^3,那么我們枚舉a,總共個數肯定不超過$\sqrt{n}+\int_{i=1}^{\sqrt{n}}(n/i^2)^{1/3}=\sqrt{n}+n^{1/3}\int_{i=1}^{\sqrt{n}}i^{-2/3}=O(\sqrt{n})$。

枚舉powerful number只要枚舉一個無平方因子的b就行。求G只要xjb線篩一下就好了。

125 div(看了)

https://11dimensions.moe/archives/182

zyz寫的很清楚了,就不廢話了= =

115 replace all(看了)

原來cf的那個題解還是挺清楚的。

雖然n多了幾個0,但是沒變難啊...

瓶頸在於算$\sum_{i=1}^n\sum_{j=1}^n2^{gcd(i,j)}$。

設F(x)表示$\sum_{i=1}^x\sum_{j=1}^x[gcd(i,j)=1]$,容易發現$F(x)=2\sum_{i=1}^x\varphi(i)-1$。

所以原式等於$\sum_{i=1}^n2^iF(n/i)$,直接對n/i根號分分,把phi拿去杜教篩就行。

129 點點的計算

容易發現T(a,b)=C(a-1,b-1)*a,那我們只要算lcm{C(n,0),C(n,1)...C(n,k)}。

考慮對於每個質數p獨立計算,那么答案就是$max_{i=0}^k (\sum_{j=0}^{\infty} \lfloor n/p^j \rfloor -\lfloor i/p^j \rfloor - \lfloor (n-i)/p^j \rfloor)​$,亦即$max_{i=0}^k (\sum_{j=0}^{\infty} [i~mod~p^j  > n~mod~p^j])$。

考慮進行貪心,考慮從小到大第一個$i~mod~p^j > n~mod~p^j$的j,那么只要$p^j$這位比n的$p^j$這位大就行,既然這位已經大了,更往前的位只要相等就行。所以我們可以從低到高考慮每一位,如果可以比n這位大,就比這位大,之后的若干位只要和n相等就行。

枚舉每個質數顯然太慢了,考慮對於大於$\sqrt{n}$的質數稍微加速一下。對於大於$\sqrt{n}$的質數,只要考慮$i~mod~p>n~mod~p$是否可行,顯然取$i=n~mod~p+1$最優,所以只需$n~mod~p \neq p-1$且$n~mod~p+1 \leq k$。先考慮$n~mod~p<k$,這就相當於$n-k<\lfloor n/p \rfloor p​$,我們直接枚舉$\lfloor n/p \rfloor$即可。$n~mod~p \neq p-1$即$p|n+1$,枚舉n+1的質因子,把滿足$n~mod~p+1 \leq k$的扣掉即可。

150 盒中之鏡(看了)

把格點黑白染色,把鏡子當做邊,當且僅當某種顏色的點構成一棵生成樹時合法。直接matrix-tree即可。

117 Monkey and Tree

傳統的數據結構題,我寫的dsu on tree+動態點分治。

144 基礎線段樹練習

我寫的分塊+多點求值,跑的還是很快的...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM