紀中集訓2019 11 05

2022-03-02 10:18:06 字數 3466 閱讀 4206

題目鏈結

有$n$個點,求$n-1$個完美匹配,且其中不出現相同的邊。

$n\le 10^3$

打暴力/手玩找到規律。

把匹配放到方格圖上,給屬於同乙個完美匹配的方格染上同樣的顏色,發現兩個性質:

①最後一列第一行填$n$,之後往下從小到大填完偶數,再從小到大填完奇數;

②$\forall i\in [1,n-1]$,從$(1,i+1)$開始往左下方填,要填$(j,0)$時,轉到$(j,n-1)$繼續。

然後每個匹配$(x,y)$按照$x

考慮對於第$i$組組完美匹配,我們可以讓它的所有$n/2$個匹配的某種特徵量都相同且為$i$。

考慮令匹配$(x,y)$中$x+y=i$。這裡為了避開主對角線,令點由$0\sim n-1$標號,那麼一組完美匹配有:

①所有$x+y\equiv i (\mod n-1),\;0\le x,y

②乙個$2p\equiv i (\mod n-1)$。

發現和分析一里的規律吻合。

#include#include

#include

#include

#include

#include

#include

#include

#include

#define il inline

#define rg register

using

namespace

std;

const

int n=1e3;

intn;

intmain()

printf("\n

");}

return0;

}

view code

精準分配的時候,可以運用這種「關聯特徵量」的思路。比如:電影院放映廳按照單雙號將人群分流到兩個大門,人們按照行號尋找座位。

一句題外話:下午講題(b組)的時候,沒有投影分數榜,結果我莽上去講「第一題的某種直觀理解方法」(分析一),沒有發現下面一片尷尬的沉默,直到講解第四題的時候我才驚覺自己走錯了片場。監介。

題目鏈結

給出一棵$n$個節點的有根樹,點的權值序列$w\$是乙個$1\sim n$的排列。定義點$i$是「好點」意為,$w_i$在根到$i$的鏈上最大。假設某個確定排列會確定樹上的$c$個「好點」,那麼這個排列的貢獻是$k^c$。給出$k$,求所有排列的貢獻總和。對$998244353$取模。

對於$20\%$的資料,$n\le 20$。

對於另$40\%$的資料,給出一條鏈。

對於$100\%$的資料,$n\le 5000$。

考慮鏈上怎麼做。

$\mathscr$:打表找規律,很容易就找到了。我也沒仔細證。

花了$4h+$撕烤規律+推導然而還是沒能找到推法的$\mathtt$表示:這規律真$tm$難推導好吧。

設$f_i$是$n=i$時的答案,那麼$f_n=f_\times (k+n-1)$,且$f_1=k$。

#include#include

#include

#include

#include

#include

#include

#include

#include

#define il inline

#define rg register

using

namespace

std;

typedef

long

long

ll;const

int n=5000

;const ll mod=998244353

;

intn;

ll k;

intmain()

view code

實在不行,打表找規律√

題目鏈結

字符集為$$。對於乙個字串,定義乙個操作是將其相鄰某兩個不同字元,替換成另乙個字元。

給出原串,求能夠拓展出的字串集的大小。

令$a=0,b=1,c=2$,設$g(s)=\sum\limits_i s_i (\mod 3)$,發現乙個操作不會改變$g(s)$,且操作之後至少會有一組相鄰的相同字元。

那麼所有長度以及$g()$相同的,且至少有一組相鄰的相同字元的字串,它們互相連通。

那麼乙個不存在相鄰相同字元的字串,隨意操作一次,就進入了上述連通塊。

現在撕烤如何計算長度為$n$,$g()$和給定串相同的答案。

考慮遞推計算,設$f[n][sum][c][p]$表示長度為$n$,$g()=sum$,末位字元是$c$,存在相鄰相同字元的情況是$p$,那麼

$$f[i+1][(s0+k)\%3][k][p||(k==x)]+=f[i][s0][x][p]$$

初值是$f[1][i][i][0]=1$。

#include#include

#include

#include

#include

#include

#include

#include

#include

#define il inline

#define rg register

using

namespace

std;

typedef

long

long

ll;const

int n=2e5;

const ll mod=998244353

;il

bool insigma(char

ch)

int n,s[n+3

];il

void

init()

il bool

check0()

il void

sol1()

printf("%d

",ans);

}il

bool

check1()

il void add(ll &x,ll y)

il int

fsum()

ll f[n+3][3][3][2

];

il void

sol2()

intmain()

view code

又是一道結論題。

前一天晚上選好了機子,結果當天一早來發現有人,心態$--$。

麻煩重重地再選了一台機子,發現忘記gmoj密碼,心態$--$。

小機房窗簾壞了,陽光很大,刺眼睛,心態$--$。

t1剛了將近兩個小時忽然發現搞錯題意,心態$--$。

轉而寫t2發現暴力沒分,心態$--$。

趕時間碼出t3暴力,心態$++$。

開始對t1找規律。其實結束之前已經搞出$n=6$的答案,然而順著小規律的蛛絲馬跡,沒有抓住那一點靈感。感慨錯億。

心態調控還可以加強。

思維再$sharpen$,找到更多更好的靈感,同時不讓它溜走。

紀中集訓 遊戲

題目鏈結 是紀中的題,不過我已經沒有紀中的號了,於是翻出了我的古早部落格 複習的時候又做了一遍,還是想了一會兒的,並且由衷地覺得這真是一道好題。考慮 sg 函式遞推。由於每次操作只能動最後一行和最後一列,那麼設 sg i,j 表示以 i,j 結尾的矩陣的 sg 函式值。轉移有 sg i,j mex ...

紀中集訓2019 3 21 橋

描述 有 m 條河,每條河的兩邊有居民點,所以共有 m 1 排居名點 如果要從一排居名點到另一排相鄰的居民點需要過河 現在有 n 個人,每個人的起點座標是 p s 終點 q t 你可以在每條河上修建一座橋,過河必須通過橋 相鄰居民點距離為 1 不考慮過河的時間 問 n 個人到終點的路徑之和最小是多少...

紀中集訓2019 3 25 染色問題

有乙個紙片,紙片上有 n 個格仔,初始時沒有顏色 某個遊戲的內容是進行 m 次染色,使得染完後 n 個格仔一定有顏色 每次可以選擇乙個區間 l,r l le r 去染 不能不染 顏色可以覆蓋 問最後染出的序列有多少種 n,m le 10 6 說正解 方程中存在兩類貢獻,一種是 f times j 1...