51nod 演算法馬拉松18 總結

2021-07-23 03:00:10 字數 2833 閱讀 4605

第一次打馬拉松。。

a 一看題。。什麼鬼。。

n=4竟然是無解,第乙個點給了乙個n=5的,好像是構造的挺有規律的樣子。。

那就偶數無解,奇數照著他的構造方法寫一發吧。。

怎麼a了?不管了。。

既然結束了還是要回來好好想一下是什麼情況的。

偶數肯定是無解的,因為一共有n(

n−1)

2 條邊,那麼每種顏色的邊出現次數相等的話,就意味著每條邊應該出現n−

12次,那麼就要求n−

1mod2≡

0 ,所以n只能是奇數。

那麼我們不妨把節點和顏色編號改為[0,n),然後令(i,j)的顏色是i+j mod n.

這樣對於任意乙個三元環(i,j,k)(

i<

j<

k ),它的邊的顏色就是(i+j,j+k,i+k)。二者之間其實是可以一一對映的。如果邊的顏色是(a,b,c),那麼三元環就是(a+

b−c2

,a+c

−b2,

b+c−

a2),而既然n是奇數,那麼2就是有逆元的。

b 一開始沒有考慮清楚邊界情況,以為直接從n=0開始dp,前面的都塞滿0就可以了,但是這樣的話n=2的時候10就會是乙個非法狀態。所以說要從n=2或3開始dp才行。

c 顯然零點有乙個

π 的週期,然後我猜它在(0

,π) 是單調的,二分了乙個零點。

結果一直過不了樣例,調了半天發現把乙個double寫成int了。。交上去發現a了。。

結束了之後來考慮一下這是什麼情況。。

於是又學了一遍三角函式。。最後發現原來這麼大的式子根本毫無卵用。∑k

=1w(

asin

(x+k

)k+s

in(k

)+bc

os(x

+k)k

+cos

(k))

=∑k=

1w(a

k+si

n(k)

(cos

ksin

x+si

nkco

sx)+

bk+c

os(k

)(co

skco

sx−s

inks

inx)

)=as

inx+

bcos

x=αs

in(x

+β)

也就是由輔助角公式的乙個簡單推論:sin(x)的線性和還是sin(x)。

d 顯然答案的式子應該這麼化:∑x

∈sub

tree

(v),

v∈so

n(u)

(siz

e(u)

−siz

e(v)

)bit

[dep

th[x

]−de

pth[

u]]

我們單獨考慮每一位2k

,顯然如果在

mod2k+

1 意義下運算這一位是不會變的。如果這一位是1的話,就意味著x−

a∈[2

k,2k

+1) 。那麼就相當於是子樹查詢權值在乙個範圍裡的數的個數。

可以dfs序+主席樹,但是常數太大t了。。後來發現直接在dfs的時候+bit就很好寫。。

時間複雜度o(

nlog22

n) e

對於每乙個g(

i),列舉它的約數j,f(

ij) 會被貢獻h(j)次。 若j

=px1

1px2

2...

,則h(j

)=∏o

(k+x

o−1k

−1) .

這樣k雖然看起來很大,但是沒啥用直接模109

+7就行。

先篩出每個數的最小質因子,然後h,g都可以暴力求,時間複雜度o(

nlogn)

. f

考慮f(i,k)表示x部1~i個點匹配了k個,最大的y部的節點是多少。

轉移就是f(

i,k)

=min

那麼考慮同乙個i,對於k來說f顯然是單增的。因為假如有f(i,k)≤f(i,k-1),那麼考慮在f(i,k)的最優方案中,前k-1條匹配邊一定 < f(i,k),那麼就意味著f(i,k-1) < f(i,k),就產生矛盾了。

也就是說其實f(i,k)的轉移是如果f(

i−1,

k−1)

∈[li

,ri)

,就一定有f(

i,k)

=f(i

−1,k

−1)+

1 ,因為f(

i−1,

k−1)

+1≤f

(i−1

,k) ;否則如果f(

i−1,

k−1)

&&f(i

−1,k

)≥li

,就一定有f(

i,k)

=li .

那麼就相當於是區間+1,單點修改,把乙個數移到從乙個地方移到另乙個地方。就用splay/fhq treap維護一下就可以了。

很久沒寫splay了。。結果找前驅/後繼的時候忘了pushdown調了乙個小時。。

時間複雜度o(

nlogn)

,結果跑了2s+…

總結:

①dp的時候一定要考慮好邊界情況。

②一定要想清楚變數的型別int/long long/double.

③寫**的時候一定要考慮清楚。

④sin(x)的線性和還是sin(x).

⑤遍歷樹的時候一定要記得下傳標記!

51nod演算法馬拉松18總結

第一次打算法馬拉松。第乙個晚上後就有人ak實在把我嚇了一跳,後來十多個人ak了,幾乎想要放棄的感覺。a 構造題,首先可以證明n為偶數時是無解的。然後我在n為奇數的構造上花了點時間,後來觀察n 5時的答案發現構造方法如下 列舉i,然後給所有邊 i,j i j 按順序染色。首先i 1,那麼連出去的邊分別...

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 ...