51nod演算法馬拉松23划水記

alan_cty發表於2017-04-07

在愚人節打的一場比賽=w=
排在了44(好數字)rating++

3.31

晚上強行留下來做了幾套試卷,整個人都處在一種非常頹廢的狀態_ (:з」∠)_
初三苟壓力大啊~~~

4.1

woc辣麼多個AK的
D題E題也辣麼多人過嚇到了
看來這場很水啊~~
抱著這種想法先去看了E題。。。
這不是裸的莫隊+樹狀陣列嗎?
E題送分smg~~
回頭看A題,三角函式懵逼.jpg
B題,隨便推推不是一個等比數列就能解決嗎?
啊好像精度不夠怎麼辦?
C題,tarjan縮環然後拓撲圖上Dp
a[x] mod a[y]的最大值?
那不就是與最大值不同的次大值嘛。。。
D題,看到n這麼小就知道是狀壓Dp了。。。
大概是壓每一列的狀態再維護一下最短路

這次的題怎麼這麼水?
F題看了一下一臉懵逼,但聽說是模型轉化一下洲閣篩
反正我不會=w=

好決定了ABCDE拿下的話應該能有前30 (^o^)/~

A題仔細想想,大膽猜想一下答案應該不會有-1
那麼特殊值法帶進去嘍
x=π3

x={\pi \over 3}

我們知道2cos(nx)=i>02aicos(x)i
2*\cos(nx)=\sum_{i>0}2*a_i*\cos(x)^i

那麼這樣右邊的每一個cos都是1,左邊就相當於右邊的係數和!
也就是答案就是2cos(nπ3)
2*cos({n\pi \over 3})

無聊的話分類討論一下就可以了
反正cmath庫的精度是夠的,直接呼叫就好了2333
B題隨手化了一下式子發現其實答案和讀入的這n個數都無關
設總的期望為c,停止的概率為p,那麼根據期望的線性ans=(1-p)ans+c
即ans=c/p
將c=n(n-1)/2n,p=m/n代入,得到ans=n(n-1)/2m
這就是答案了。。。
接著我看C題似乎有點難寫就決定先去寫思路簡單明瞭的E題
等等模數怎麼是2^64?要用乘法取模黑科技啊?
常數好大怎麼卡?沉思.jpg
你逗我呢這道題的答案又不會爆long long幹嘛要取模啊
出題人很棒棒哦
很快地寫完測完樣例交了一發。。。
TLE
啊要卡常啊。。。
TLE…
TLE…
TLE…
TLE…
TLE…
很好出題人你贏了,難怪這道題是E題,完美的考查了選手的程式碼常數、卡常技巧和底層優化的熟練程度
最後我很機(sang)智(bing)地把塊大小從233一直試到了333,然後終於卡過去了
QwQ不容易啊
這裡寫圖片描述
我感受到了出題人深深的惡意

然後去淦C題
寫出來一切正常然後發現WA?
看看時間woc舍監要查房了
算了明天再改。。。

4.2

什麼早上還要做模擬賽(╯‵□′)╯︵┻━┻
寫到後面棄療繼續改C
最後發現原來答案和次大值要分開來維護。。。
還是too young
改過之後還要改模擬賽的題就沒時間打D了,算了就先這樣吧。。。

D題口胡一下就是以每一列的第一行的最短路為標準,壓每一行的最短路與上一行之間的差值。
因為相鄰兩點之間的最短路差最多為1,而轉移可以預處理,所以複雜度是O(6^nm^2)
卡卡應該是能過的。。。

UPD:似乎E題正解並不是這樣做,看來還是naive地水了過去_ (:з」∠) _
正解直接是分塊,設F[i][j]表示塊i到塊j的答案,那麼F[i][j]=F[i+1][j]+F[i][j-1]+v[i][j]
其中v[i][j]表示塊i和塊j的答案。
求v[i][j]的話可以像排序一樣合併i,j這兩個塊,然後從前往後掃,像樹狀陣列一樣維護4個值,然後分類討論,如果掃到的值屬於後面那個塊就更新答案。
然後對於每個詢問都可以分成三部分,然後利用和上面一樣的方法對每兩個部分分別計算答案。
這樣的總複雜度就是O(nn)

O(n\sqrt n)
的,強行用排序+掃描的方法去掉了樹狀陣列的log
也是挺機智的,反正我還是過了_ (:з」∠) _

相關文章