日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 5322 Hope

發布時間:2023/10/18 编程问答 106 如意码农
生活随笔 收集整理的這篇文章主要介紹了 HDU 5322 Hope 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HDU 5322 Hope

考慮 $ dp[n] $ 表示 長度為 $ n $ 的所有排列的答案。

首先,對于一個排列來說,如果最大值在 $ i $ 位置,那么前 $ i - 1 $ 個數必然與 $ i $ 在一個聯通塊,且必然不會與 $ i $ 后面的數字在一個連通塊。

那么考慮一種常用的排列的處理技巧,考慮將 $ n $ 插入 $ 1 \dots n-1 $ 的一個排列,比如插入的位置是 $ i $ 那么 $ i + 1 \dots n $ 相當于又是一個排列,而 $ 1 \dots i - 1 $ 的方案數是 $ A_{n-1}^{i-1} $ 所以答案就是

$ dp[n] = \displaystyle \sum_{i=1}^n A_{n-1}^{i-1} i^2 dp[n - i] $

這個式子看起來就很分治FFT。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define ll long long
using namespace std;
#define P 998244353
#define MAXN (1 << 19) + 12
int n;
int a[MAXN];
int Pow(int x,int y) {
int res=1;
while(y) {
if(y&1) res=res*(ll)x%P;
x=x*(ll)x%P,y>>=1;
}
return res;
}
int wn[2][MAXN];
void getwn(int l) {
for(int i=1;i<(1<<l);i<<=1) {
int w0=Pow(3,(P-1)/(i<<1)),w1=Pow(3,P-1-(P-1)/(i<<1));
wn[0][i]=wn[1][i]=1;
for(int j=1;j<i;++j)
wn[0][i+j]=wn[0][i+j-1]*(ll)w0%P,
wn[1][i+j]=wn[1][i+j-1]*(ll)w1%P;
}
}
int rev[MAXN];
void getr(int l) { for(int i=1;i<(1<<l);++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<l-1); }
void NTT(int *A,int len,int f) {
for(int i=0;i<len;++i) if(rev[i]<i) swap(A[i],A[rev[i]]);
for(int l=1;l<len;l<<=1)
for(int i=0;i<len;i+=(l<<1))
for(int k=0;k<l;++k) {
int t1=A[i+k],t2=A[i+l+k]*(ll)wn[f][l+k]%P;
A[i+k]=(t1+t2)%P;
A[i+l+k]=(t1-t2+P)%P;
}
if( f == 1 ) for(int inv=Pow(len,P-2),i=0;i<len;++i) A[i]=A[i]*(ll)inv%P;
}
int f[MAXN];
int A[MAXN] , B[MAXN];
int J[MAXN] , invJ[MAXN];
void CDQ(int *a,int *b,int l,int r){
if( l == r ) return;
int m = l + r >> 1;
CDQ( a , b , l , m );
int p = 1 , len = 0;
while( p <= ( r - l + 1 ) * 2 ) p <<= 1 , ++ len;
getr( len ) , getwn( len );
for( int i = 0 ; i < p ; ++i ) A[i] = B[i] = 0;
for( int i = l ; i <= m ; ++i ) A[i - l] = 1ll * a[i] * invJ[i] % P;
for( int i = 0 ; i <= r - l ; ++i ) B[i] = 1ll * i * i % P;
NTT( A , p , 0 ) , NTT( B , p , 0 );
for( int i = 0 ; i < p ; ++i ) A[i] = 1ll * A[i] * B[i] % P;
NTT( A , p , 1 );
for( int i = m + 1 ; i <= r ; ++i ) a[i] = ( a[i] + 1ll * J[i - 1] * A[i-l] % P ) % P;
CDQ( a , b , m + 1 , r );
}
int main() {
J[0] = invJ[0] = 1;
for( int i = 1 ; i < MAXN ; ++ i ) J[i] = 1ll * J[i - 1] * i % P , invJ[i] = Pow( J[i] , P - 2 );
f[0] = 1;
CDQ( f , a , 0 , 100006 );
int x;
while( cin >> x ) printf("%d\n",f[x]);
}

總結

以上是生活随笔為你收集整理的HDU 5322 Hope的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: avtt亚洲天堂 | 亚洲色图久久 | 亚欧洲精品视频在线观看 | 日本在线 | 国产做爰xxxⅹ久久久精华液 | 亚洲成人观看 | 最新不卡av | 亚洲国产精品免费在线观看 | 欧美色综合色 | 久久高清 | 中文在线观看免费 | 亚洲精品中文字幕乱码无线 | 男生脱女生衣服 | 激情五月婷婷综合 | 调教丰满的已婚少妇在线观看 | av国产一区 | 黄色永久网站 | 国产在线精品播放 | 好吊妞视频在线 | 国产免费久久精品国产传媒 | 日日摸日日碰 | 亚洲精选一区二区 | 麻豆黄色网址 | 久久久伦理片 | 一道本一区 | 98堂 最新网名 | 久久国产经典视频 | 日本美女日批视频 | 美女流白浆视频 | 胸网站 | 永久免费av| www.自拍偷拍 | 成年网站免费观看 | 色无极亚洲 | 内地级a艳片高清免费播放 91在线精品一区二区 | 日本成人午夜 | 亚洲国产精| 欧美精品xx | 国产又粗又猛又黄又爽的视频 | 国产又大又粗又爽的毛片 | 国产欧美精品一区二区在线播放 | 日本三级一区 | 激情黄色小说网站 | 男女野外做受全过程 | 一区二区三区国产精品 | 成人做爰69片免费 | 小镇姑娘1979版 | 91网在线播放 | 久久国产影视 | 欧美一级片一区二区 | 超碰国产人人 | 日韩亚洲欧美中文字幕 | 欧美裸体xxxx极品少妇 | 亚洲天天在线 | 法国空姐 在线 | 成人av一级 | 亚洲欧美激情另类校园 | 国产一区二区视频在线观看免费 | 婷婷午夜天 | 国精产品一区一区三区有限公司杨 | 国产综合视频在线观看 | 男人天堂网址 | 羞羞影院体验区 | 亚洲一区精品在线观看 | 91久久一区 | 欧美福利小视频 | 91小视频在线 | 亚洲欧美动漫 | 日本欧美成人 | 三级黄毛片 | 国产精品精品视频 | 福利视频网址 | 男女插孔视频 | 一区二区视频在线免费观看 | 午夜精品极品粉嫩国产尤物 | 久久免费成人 | 超黄网站在线观看 | 国产精品一区二区在线免费观看 | 最近高清中文在线字幕在线观看 | 91成人综合 | 精品综合久久久 | 日本丰满少妇做爰爽爽 | 国产福利电影在线 | 日韩精品在线电影 | 日本在线观看视频网站 | 精品一区二区毛片 | 欧美区一区二 | 久久色网站 | 国产女人呻吟高潮抽搐声 | 一区二区三区中文字幕 | 污污视频在线播放 | 亚洲精品男人天堂 | 免费网站观看www在线观 | 国产一区二区在线播放 | 狠狠干夜夜草 | 图片区亚洲 | 天堂а√在线最新版中文在线 | 一本久道视频一本久道 | 欧美激情 一区 |