定義乙個長度為\(n\)的序列\(a\)的權值為:
\[\sum_^n\sum_^n f_a(l,r)
\]其中\(f_a(l,r)f\)就是在\(a\)的區間\([l,r]\)中,「所有在該區間內出現過的元素出現次數的乘積」再乘上「區間內所有元素的乘積」。
要求構造乙個長為\(n\)的序列,其中每個元素都是\([1,m]\)中的整數,最大化其權值。
她並不會,只好均勻隨機\(n\)個\([1,m]\)中的整數組成乙個數列,然後輸出其權值。
當然,她的這份程式一分都沒拿到;但她想知道,生成出的序列期望權值是多少。
為了防止精度問題,答案需要對\(998244353\)取模。
想到第一步之後就是做爛的套路了...
可以統計每種長度的所有區間的貢獻。設\(g_n\)為所有長度為\(i\)的區間的貢獻,那麼答案就是:
\[ans=\sum_^ng_i(n-i+1)m^
\]由於數的位置不同數列就不同,我們可以寫出選每種數的\(egf\):
\[f(x)=\sum_\frac=\sum_\frac
\]那麼\(g\)的\(egf\)就可以表示成:
\[g(x)=\prod_^f(ix)=\exp(\sum_^n\ln f(ix))
\]那麼求出\(\ln f(x)\)的係數之後,第\(n\)次項係數乘上\(\sum_^mi^n\)就是\(\sum \ln f(ix)\)的\(n\)次項係數。
現在就是做爛了的自然數冪和。寫出這個東西的\(egf\):
\[h(x)=\sum_(\sum_^mi^n)\frac
=\sum_^m\sum_\frac
=\sum_^me^=\frac-1}
\]這裡為了方便讓\(i\)從\(0\)開始的,最後求出係數後讓\(0\)次項為\(0\)即可。但是這裡分母的\(0\)次項為\(0\),怎麼求逆呢?注意到分子的\(0\)次項也是\(0\),所以同時給分子分母都除個\(x\)即可。總複雜度\(\mathcal(n\log n)\)
#include#define rg register
#define il inline
#define cn const
#define fp(i,a,b) for(rg int i=(a),ed=(b);i<=ed;++i)
#define fb(i,a,b) for(rg int i=(a),ed=(b);i>=ed;--i)
using namespace std;
typedef cn int cint;
cint maxn = 200010, mod = 998244353, g = 3, invg = (mod+1)/3;
int n, m, fac[maxn] = , ifac[maxn], inv[maxn] = ;
int f[maxn] = , ln[maxn<<2], g[maxn<<2], ans;
int a[maxn<<2], b[maxn<<2], h[maxn<<2], pw = 1;
int lim, hst, rev[maxn<<2];
il int fpow(int a, int b, int ans = 1)
il void init(int n)
} }if(!typ)return;
rg int inv = fpow(lim, mod-2);
fp(i, 0, lim-1)a[i] = 1ll*a[i]*inv%mod;
}int inv_ary[maxn<<2];
void get_inv(int *a, int *f, int n)
int ln_ary[maxn<<2];
il void get_ln(int *a, int *f, int n)
int exp_ary[maxn<<2];
void get_exp(int *a, int *f, int n)
int main()
洛谷 PMOI 2 簡單構造題
初見安 這裡是傳送門 p7423 pmoi 2 簡單構造題 好像確實是第一步難想 其他的都比較套路了 顯然我們要脫離列舉區間左右端點這種策略,嘗試找到某個共性可以將一些區間收起來。考慮列舉區間長度。假設所有區間對總答案的貢獻。則答案就是 含義為,這個區間首先有n i 1個位置,其次另外的n i個位置...
492 構造矩形(簡單題)
題目描述 作為一位web開發者,懂得怎樣去規劃乙個頁面的尺寸是很重要的。現給定乙個具體的矩形頁面面積,你的任務是設計乙個長度為 l 和寬度為 w 且滿足以下要求的矩形的頁面。要求 你設計的矩形頁面必須等於給定的目標面積。寬度 w 不應大於長度 l,換言之,要求 l w 長度 l 和寬度 w 之間的差...
一 leetcode 簡單題 2
21.將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。一次ac,13分鐘寫完,中途接了一次中國聯通推廣 思路簡單 struct listnode mergetwolists struct listnode l1,struct listnode l2...