noi前第十一場 題解

2022-03-16 18:16:04 字數 1225 閱讀 8885

容易發現答案是

\[f_m=\sum \limits_^n a_i[x^i](1-x)^m(1+x)^

\]然後就有乙個顯然的 \(o(n^2)\) 做法,並不會優化。

乙個優化的方法是,考慮 \((1-x)\) 和 \((1+x)\) 相加為 \(2\)。

所以可以將 \((1-x)\) 轉化為 \(2-(1+x)\) 的形式。

這樣就可以用二項式定理展開 \((2-(1+x))^m\) 這個東西。

然後發現其中乙個項只與 \(m-i\) 有關,並且可以通過卷積得到。

所以卷積兩次就可以得到所有答案。

另乙個優化方法是用組合含義:

考慮設 \(a_i=\sum \limits_^i b_j \binom\)。

也就是說我們將選 \(i\) 個元素轉化計數每個子集統計答案。

這樣就可以將原來的集合分成四部分:

造成 \(-1\) 貢獻和造成 \(+1\) 貢獻,在子集中和不在子集中。

然後可以發現其中的大部分項都因為 \((1-1)^k\) 被弄沒了,所以也可以兩次卷積,分別求出 \(b\) 陣列和最終答案。

首先是第一問。

對於 \(k>0\) 的子任務,容易發現一定恰好有一條邊有兩個點。

推廣一下是這樣的,一定存在一條邊 \((x,y)\),上面的頂點序列有連續的 \(x,y\)。

對於任意一條最短的路徑,一定僅存在一次上述即邊上頂點序列包含兩個頂點的情況。

所以可以列舉這種情況在哪條邊的哪個位置出現,通過邊上的序列不斷拓展點上的序列即可。

稱極短的這樣的路徑為 \(b\) 路徑,發現這樣的 \(b\) 路徑兩端可以分別加上 \(a\) 路徑和 \(c\) 路徑,大概表現為邊上頂點序列比點上頂點序列少乙個點。

同理可以找出所有的 \(a,c\) 路徑,然後可以發現任意一條 \(aaaabcccc空aaabccc空b\) 的路徑都是合法的,所以用 \(dp\) 合併一下即可。

有這樣乙個做法,首先構造出一棵生成樹出來,考慮每個點都向根流乙個單位的流量。

然後只需要統計出環的流量減去入環的流量,得到的就是環的大小。

因為題目是平面圖,所以只要在每個點上極角排序就可以通過確定區間得出了。

然而好像如果任意構造生成樹,會因為父親恰好在兩條邊之間,但是在環之外錯掉。

然而好像如果通過 \(dfs\) 建這棵樹,因為不存在橫叉邊,就不會存在這樣的情況。

對於如何判斷給出的環順時針還是逆時針。

其實只需要通過叉乘求一下面積即可得出。

暑期個人賽 第十一場 E

時間限制 1000 ms 記憶體限制 65536 kb 小妹妹和叔叔來到了小明湖畔划船,到了湖中間的時候,叔叔突然手一抖就把槳掉到了水裡。叔叔對小妹妹說 怎麼辦呀我們沒辦法划船了,我們是不是就只能這樣子一直兩個人呆在湖 了呢 機智的小妹妹想了一會兒,她說 我發現,靠風來吹我們的船也是可以動的喲 你說...

noi前第十七場 題解

考慮這樣乙個做法,對於每個點處理出左側和右側分別的最優決策點,然後比較二者誰更優即可。當然這樣的點可以表示為若干個區間,對於其中每個區間,左右側誰更優是單調的,可以通過二分求解。所以問題就是如何處理出這樣的若干個區間。可以想到這個最優決策點就是上凸包會切到的點。所以寫乙個單調棧維護就好了。學習了一下...

noi前第十六場 題解

莫名想到了乙個結論,這種題可以找到選中的點形成的重心。然後求所有點與重心距離的和即可。原因是,任意乙個子樹大小均小於 m 所以總可以構造出方案。在這道題中,只要列舉最接近 1 號點的可能的重心,然後計算方案數就可以 o n 3 仔細想一下,可以把每個點到達重心的距離攤到每條邊的貢獻上。直接套用上面得...