LuoguP6694 強迫症 找規律 NTT

2022-05-08 01:21:06 字數 1211 閱讀 5600

比賽的時候切的,可惜沒搶到首 a.

權值和等於 $\sum_^ \sum_^ a_ \times a_ \times f(j-i+1) \times f(n-j+i+2)$,最後再除以 4.  

然後這裡的 $f(n)$ 就代表 $n$ 個點構成的圓環的不相交生成子圖的方案數.

可以將前 $5$ 項打表打出來,上 $oeis$ 找到通項公式,然後就可以拿到 $40$pts 的好成績.         

觀察上面的式子,我們發現可以列舉 $f(j-i+1)$ 的長度,然後就要求有貢獻的點對距離必須為 $(j-i+1)$,這個用 ntt 來求即可. 

code: 

#include #include #include #define n 100007

#define ll long long

#define mod 998244353

#define setio(s) freopen(s".in","r",stdin)

using namespace std;

int a[n],pw[n],n,val[n],f[n],a[n<<2],b[n<<2];

int qpow(int x,int y)

}return tmp;

} int get_inv(int x)

void ntt(int *a,int len,int op)

for(int j=len>>1;(k^=j)>=1);

}

for(int l=1;lfor(int i=0;i}

}if(op==-1)

}}

void init()

a[0]=a[1]=1;

for(int i=2;if[2]=2;

for(int i=3;i}

int main()

for(int i=0;iint lim;

for(lim=1;lim<=2*n;lim<<=1);

ntt(a,lim,1),ntt(b,lim,1);

for(int i=0;intt(a,lim,-1);

int ans=0,inv2=get_inv(4);

for(int i=1;iprintf("%d\n",(ll)ans*get_inv(f[n])%mod);

return 0;

}

強迫症的序列

小a是乙個中度強迫症患者,每次做陣列有關的題目都異常難受,他十分希望陣列的每乙個元素都一樣大,這樣子看起來才是最棒的,所以他決定通過一些操作把這個變成乙個看起來不難受的陣列,但他又想不要和之前的那個陣列偏差那麼大,所以他每次操作只給這個陣列的其中n 1個元素加1,但是小a並不能很好的算出最優的解決方...

強迫症的自我恢復

怎樣克服強迫症?這是很多的人比較關注的乙個問題。強迫症給人們的工作和生活帶來很嚴重的影響,如果不及時進行 對人的健康損害是很大的。那麼怎樣克服強迫症呢?下面就介紹一些怎樣克服強迫症的除錯方法,希望能幫助到更多的患者朋友。1 了解 和發病機制 強迫症與一定的人格特徵有密切關係。具有強迫症的人,在性格上...

J 強迫症的序列

題目描述 小a是乙個中度強迫症患者,每次做陣列有關的題目都異常難受,他十分希望陣列的每乙個元素都一樣大,這樣子看起來才是最棒的,所以他決定通過一些操作把這個變成乙個看起來不難受的陣列,但他又想不要和之前的那個陣列偏差那麼大,所以他每次操作只給這個陣列的其中n 1個元素加1,但是小a並不能很好的算出最...