看這個進度,天天只要能作一道自選題應該就能在時限內完成了 = = 因此仍是儘可能不要看題解好了,看了題解的會標明git
119 衆數MAXgithub
假設咱們枚舉衆數p,那麼顯然答案就是$\max_p\{\sum_gmin(ca_g,cb_{p-g})\}$。數組
考慮分塊,對於$ca_g>S,cb_{p-g}>S$的咱們暴力,小的fft。數據結構
實測取S=4跑的最快。函數
127 Ballpost
設$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})$。spa
那麼就只缺一個ln、exp、sqrt板子了。測了測只有70,那我也沒有辦法…code
120 Mike學OI(看了)blog
模板題,見另外一篇文章。
130 Cow Coupons
若是買不到k頭牛,那麼顯然是全用優惠券,先sort一下特判一下。
首先先把全部牛按Pi-Ci從小到大排序,那麼確定是有一個分界線,分界線左邊找若干個不用優惠券,右邊找k個用優惠券。
隨着分界線右移,右邊的花費會愈來愈大,從而左邊剩下的會愈來愈小,暴力維護便可。
128 Permutations(看了)
我發現我可能沒學清楚laplace展開…
首先顯然咱們只要算行列式的奇偶性就能夠了。
考慮改變一個元素以後行列式的變化,咱們把行列式在那一行用laplace展開,相似這樣:
那麼改變的就是這個位子的代數餘子式。
那麼咱們只要求出每一個位子的代數餘子式,這個很簡單,只要求出逆矩陣以後/行列式就是伴隨矩陣了。因爲行列式是奇數,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}})$作法。
懶得再打一遍了,就截圖吧…
我以爲這題應該有複雜度更優秀的作法…
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 基礎線段樹練習
我寫的分塊+多點求值,跑的仍是很快的...