考試反思 0212省選模擬23 迷失

2022-02-03 02:15:27 字數 3184 閱讀 3781

這是$noi$模擬啊。。。

估分50+40+0=90

5分。。。5分。。。

腦子可能落在家,啊不,落在學校了。。。

考後幾分鐘就達到了估分。混了個六七八名啥的。。。賽後排行榜也一直不太低。。。

最近總是這樣,到底為什麼啊啊啊。。。

也不知道為什麼,在家腦子好像動不起來。。。

$t2$的$40$分暴力是聯賽原題,沒什麼好說的。

$t1$的鏈和菊花的部分分單反==但凡是花了點時間想的差不多都能想出來。

$t3$讀錯題了,最後才發現,沒有留思考時間。然而感覺思路不是很好想。。。

唯一乙個表現比較突出的地方就是$t1$想到了$n \le 5$的做法,如果不丟分的話是個單題最高分。

一塌糊塗。

t1:exceptation

大意:樹,邊權[0,1]隨機,求直徑的期望。$n \le 100$

鏈是$\frac$

菊花是最大值加次大值$\frac$

$n \le 5$發現只有在$n=5$時有一種既不是菊花有不是鏈的情況,它恰好就是樣例。

剩下的不會。

t2:sequence

本質不同子串行是聯賽模擬原題了。$dp[i]$表示以$i$結尾的本質不同子串數。

換個思路,設$dp[i][j]$表示到$i$位置結尾字元為$j$的本質不同子串數。

這個可以轉移,而且可以寫成矩陣乘法的形式。

矩陣形如:

1  0  0  0  1  0

0  1  0  0  1  0

0  0  1  0  1  0

0  0  0  1  1  0

0  0  0  0  1  0

0  0  0  0  1  1

也就是個單位矩陣,一列變為$1$。

我們的區間詢問讓我們想到可以用字首和來維護。然而矩陣乘的字首和意味著我們需要它的逆元的字首和。

逆元形如:

1  0  0  0  -1  0

0  1  0  0  -1  0

0  0  1  0  -1  0

0  0  0  1  -1  0

0  0  0  0   1  0

0  0  0  0  -1  1

我們的初始狀態是空串,也就是乙個行向量$h=[1,0,0,0,...,0]$。

最終我們轉移完成後需要求和,也就是要乘上乙個列向量$l=[1,1,1,...,1,1,1]^t$。

那麼答案就應該是$h \times inv_ \times a_r \times l$

此處的$a,inv$為轉移矩陣的字首積以及逆元。

然而仔細想一想發現,因為矩陣乘法並沒有交換律,所以乘的順序很關鍵。

$h \times inv_1 \times inv_2 \times ... \times inv_ \times a_1 \times a_2 \times ... \times a_r \times l$這是不對的。

因為逆元都乘起來再乘原矩陣不一定會得到單位矩陣,沒有交換律。下面這個才是對的。

$h \times inv_ \times inv_ \times ... \times inv_ \times inv_ \times a_1 \times a_2 \times ... \times a_r \times l$

這樣的話中間相鄰的兩項才會兩兩抵消。所以我們在處理逆元的字首積時實際上要求乘的順序是倒著乘過去的。

所以接下來我們只要求出$h \prod_^ inv_i$以及$\prod_^ a_i \times l$即可利用這兩個向量,$o(53)$地求出每組詢問的答案。

從含義上理解或者從矩陣上來研究,我們發現這個矩陣很特殊。

首先考慮轉移矩陣$a$。我們要維護的是$a_i = a_ \times a_i$。所以考慮乙個矩陣乘上$a_i$會發生什麼。

發現結果是對於矩陣的每一行,第$s_i$列要加上其餘所有列的值。

而最後要乘上$l$則是對每一行求和,所以額外開乙個陣列維護每行的和即可。

接下來考慮逆元的字首和。$inv_i=inv_i \times inv_$。順序反了過來。

發現逆元矩陣乘上乙個矩陣的效果是,除了第$s_i$行以外,其餘每行都要對位減去這一行。

減的值都是一樣的,不難想到打個標記就好了。我們要算的是$h \times inv_i$。發現意思也就是保留第一行。

所以上述操作都是$o(53)$的。然後我們要儲存的也只是$n$個長為$53$的行列向量。

空間足夠時間合法。總複雜度$o(53(n+q))$

t3:counting

大意:$n$點有向圖。不斷不重複的選出一條邊,每次選後記錄當前$scc$數得到$e$數列。求前$i(1 \le i \le n(n-1))$有多少種$e$數列。$n \le 100$

肯定是個$dp$了但是完全看不出怎麼做。。。

如果你是神仙,你就能想到,對於每種$e$數列,一定存在一種選邊順序,使得除$1$號點所在的$scc$外剩下的$scc$大小均為$1$。

而且,對於每種滿足這個條件的選邊狀態(已連邊數,$1$號$scc$大小,形成$1$號$scc$過程中$e$變化了幾次),它與乙個特定的$e$序列一一對應。

所以我們現在的問題是求出選邊的方案數。

設$dp[i][j][k]$,對應上面的選邊狀態。

首先要判斷這個狀態是否合法,即邊數是否過多或過少。

環每在外部閉合一次,那麼就一定在生成樹基礎上多了一條邊,所以$i \geq j+k-1$

邊數最多的情況是$1$號$scc$內部已經是完全圖且與外部所有點連邊,外部所有點形成最長$dag$。最大邊數為$j(j-1)+j(n-j)+c_^$

如果這個位置合法那就可以轉移了。

$dp[i][j][k]=dp[i-1][j][k]+\sum\limits_^dp[i-1][p][k-1]$

字首和優化一下就沒了。

$2$個$10^8$陣列開得下,$1g$記憶體就是良心啊。

1 #include2

using

namespace

std;

3#define mod 998244353

4int dp[10001][101][101],sum[10001][101][101];5

int mo(int x)

6int

main()

17 }

view code

考試反思 0502省選模擬86 恐懼

還是狀態持續不佳。但是今天沒那麼困,雖說腦子還是不想動。一看到原題就慫,毛病。好像考場上遇到原題的話,得分會比非原題還低。t2 作為原題就直接放棄正解了 然後乖乖的打部分分,結果教練把子任務放錯了於是丟了 15pts 放錯子任務同時也導致 直接輸出 0 能多 20 分。啊人就應該有信仰啊為什麼我沒輸...

考試反思 0316省選模擬47 偏頗

這套題的考察思路其實不錯。三暴力,掛乙個。t1 是送分,但是一眼覺得是大資料結構,於是直接扔掉了。結果竟然是個原題。dy 講的只記住了只言片語思路早就忘了。好歹這次會了。t2 的話寫了個亂搞,結果把本來到手的 20 給寫死迴圈了,加了句判斷就 50 了。t3 差不多想到正解了,但是毒瘤出題人不給部分...

考試反思 0313省選模擬44 習慣

我也不知道我在幹什麼了。僥倖還是害人啊。t1 乙個變數名的大小寫寫錯了 shift沒按住 然後就爆零了,丟了 45 分。然後 oj 貌似終於支援靜態記憶體了?不知道反正我就謎之 mle 了,我根本都沒用那東西。然後開小點就有 35 分了。85 分的場打成 5 分。哎。話說這套題好噁心啊,部分分很少且...