長度為\(n\)的序列, 每個位置都可以被染成\(m\)種顏色中的某一種.
如果恰 好出現了\(s\)次的顏色有\(k\)種, 會產生\(w_k\)的貢獻.
對於所有可能的染色方案, 他能獲得的愉悅度的和對 \(1004535809\)取模的結果是多少.
最多有\(lim=\min(m,\frac)\)種顏色。
記最少選\(i\)種的答案為\(f[i]\),有:
\[f[i]=\tbinom\frac(m-i)^
\]容斥一下得到答案為:
\[ans[i]=\sum_^(-1)^\tbinomf[j]
\]拆開來:
\[ans[i]=\sum_^(-1)^\fracf[j]
\]\[ans[i]\times i!=\sum_^\frac}\times f[j]j!
\]記\(g[i]=\frac,f[i]=i!\times f[i]\)
\[ans[i]\times i!=\sum_^g[j-i]\times f[j]
\]翻轉\(f\),得到:
\[ans[i]\times i!=\sum_^g[j-i]\times f[lim-j]
\]卷積顯而易見。
#includenamespace in
template inline void read(t& t)
while(isdigit(ch))if(f)t=-t;
} template inline void read(t& t, args&... args)
}namespace out
inline void putc(const char &x)
template void write(t x) while (x);}elsewhile(x);}
while (len>=0)putc(buf[len]),--len; }}
using namespace std;
templatestruct modint
modint&operator = (int o)
modint&operator +=(modinto)
modint&operator -=(modinto)
modint&operator *=(modinto)
modint&operator ^=(int b)
modint&operator /=(modinto)
modint&operator +=(int o)
modint&operator -=(int o)
modint&operator *=(int o)
modint&operator /=(int o)
templatefriend modintoperator +(modinta,i b)
templatefriend modintoperator -(modinta,i b)
templatefriend modintoperator *(modinta,i b)
templatefriend modintoperator /(modinta,i b)
friend modintoperator ^(modinta,int b)
friend bool operator ==(modinta,int b)
friend bool operator !=(modinta,int b)
bool operator ! ()
modintoperator - ()
modint&operator++(int)
};const int n=1e7+5;
const int mod=1004535809;
const modintgg=3,ginv=modint(1)/3;
struct poly
int size()
void resize(int n)
void reverse()
};int rev[n];
inline int ext(int n)
inline void ntt(poly&a,int k,int typ)
} }if(typ<0)
signed main()
洛谷P4491 HAOI2018 染色
題面 題解 首先這個 恰好 看著很不爽,換成 至少 設 f i 表示顏色個數為 s 的顏色至少有 i 個的方案數。考慮如何計算。1.m 個顏色選了 i 個,binom 2.i 個顏色選了恰好 s 個,其他的 m i 個顏色任選 frac i times fac n i s 3.剩下 n i s 個位...
HAOI2018 簡要題解
以前做過的 haoi2018 染色 haoi2018 蘋果樹暫時不更 haoi2018 字串覆蓋 已經棄療了。總體難度 medium 偏 easy,但是 luogu4495 haoi2018 奇怪的揹包 想不到是真的腦抽。可以在 找到。小 c 和小 g 經常在一起研究搏弈論問題,有一天他們想到了這樣...
題解 HAOI2018 反色遊戲
題目傳送門 給出乙個 n 個點 m 條無向邊的圖,每個點都有乙個 in 0,1 的權值,每次可以選擇一條邊,然後將該邊相連兩點權值異或上 1 問有多少種選擇方法使得每個點的權值都變為 0 每條邊只能選擇一次 但是這個問題太簡單了,所以你要求刪掉每個點以及它連出的邊之後的答案。有 t 組資料,t le...