題目鏈結
有$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#includeview code#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;
}
精準分配的時候,可以運用這種「關聯特徵量」的思路。比如:電影院放映廳按照單雙號將人群分流到兩個大門,人們按照行號尋找座位。
一句題外話:下午講題(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#includeview code#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()
實在不行,打表找規律√
題目鏈結
字符集為$$。對於乙個字串,定義乙個操作是將其相鄰某兩個不同字元,替換成另乙個字元。
給出原串,求能夠拓展出的字串集的大小。
令$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#includeview code#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()
又是一道結論題。
前一天晚上選好了機子,結果當天一早來發現有人,心態$--$。
麻煩重重地再選了一台機子,發現忘記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...