51nod演算法馬拉松18總結

2021-07-23 04:34:12 字數 1730 閱讀 5103

第一次打算法馬拉松。

第乙個晚上後就有人ak實在把我嚇了一跳,後來十多個人ak了,幾乎想要放棄的感覺。。。

a: 構造題,首先可以證明n為偶數時是無解的。

然後我在n為奇數的構造上花了點時間,後來觀察n=5時的答案發現構造方法如下:

列舉i,然後給所有邊(i,j)(i < j)按順序染色。

首先i=1,那麼連出去的邊分別染為1,2,3…n-1

然後i=2,連出去的邊染為3,4,5…n

i=3,染為5,6…1

…… i=n−

12+1

,連出去2,3,4….

…… 也就是把編號看成0——n-1,然後(i,j)染色為(i+j)%n

b: 一眼題!首先可以設f[i][j]表示前i位已經確定,最後3位用2進製狀態j表示。

然後n很大,要用矩陣乘法。。

c: 我最後一道切的題。看完後:三角函式懵逼.jpg

後來換了幾個a,b打了個表,發現f(x)是個週期性函式,並且相鄰兩個零點距離為

π ,然後二分找出第乙個正根,接著暴力找剩下的根。

後來取了下經,發現式子是這樣化的: f(

x)=∑

k=1w

(ak+

sin(

k))s

in(x

+k)+

bk+c

os(k

)cos

(x+k

)=∑k

=1w(

ak+s

in(k

))(s

in(x

)cos

(k)+

cos(

x)si

n(k)

)+bk

+cos

(k)(

cos(

x)co

s(k)

−sin

(x)s

in(k

))=a

sin(

x)+b

cos(

x)=α

sin(

x+β)

d: 可以考慮對二進位制每一位分別處理。

假設當前是處理二進位制第k位。可以發現它的父親中和它距離的二進位制第k位為1的是幾個長度相同的區間。那麼對每個深度都對2k

+1取模後就是深度相同的一段。

那麼每遞迴向下一層就是相當於區間往後移動一位。就可以o(

n)地計算了。

e: 感覺也差不多是一眼題。

看起來一大堆sigma,考慮f(i)對g(j)的貢獻,其實就是通過k個sigma後到達i的方案數。然後每次i都是變成它的倍數,所以可以分解質因數分別考慮每個質因數。假設當前質因數次數為x,貢獻就是cx

−1k+

x−1 。

但是k很大,不過我們發現只要預處理lo

g(n)

個這樣的組合數即可。直接暴力!

總時間複雜度o(

nlog

n)

f: 要好好利用邊不相交這個條件。

可設f[i][j]表示前i個數匹配了j個後,最後乙個匹配中b集的點的編號最小是多少。顯然i相同時這是單調遞增的。

然後考慮轉移,對於當前的li,ri,找到f[i-1]中值在[li,ri)範圍的數。這顯然是乙個區間。然後假設f[i-1][k]∈[li,ri),f[i-1][k]+1—>f[i][k+1]。對於滿足條件的最小的k,f[i][k]=li。

n達到300000,用splay來維護即可。

51nod 演算法馬拉松18 總結

第一次打馬拉松。a 一看題。什麼鬼。n 4竟然是無解,第乙個點給了乙個n 5的,好像是構造的挺有規律的樣子。那就偶數無解,奇數照著他的構造方法寫一發吧。怎麼a了?不管了。既然結束了還是要回來好好想一下是什麼情況的。偶數肯定是無解的,因為一共有n n 1 2 條邊,那麼每種顏色的邊出現次數相等的話,就...

51nod演算法馬拉松32

比賽鏈結 馬拉松是真的難 應該是我太菜了tnt 同bzoj1534 題解戳這裡 n個有標號的點,其中m個是葉子節點。問有多少數的形態。include include include include include using namespace std typedef long long ll co...

51nod演算法馬拉松15

智力徹底沒有了。看來再也拿不到獎金了qaq。a b君的遊戲 因為資料是9b1l,所以我們可以hash試一下資料。include include include include define rep i,s,t for int i s i t i define dwn i,s,t for int i ...