hdu5530
分治ntt
考虑从添加i,放在j位置,那么1->j是一个连通块,j+1->i和1->j不连通,那么我们可以列出式子dp[i]=∑j=1->i dp[i-j]*A(i-1,j-1)*j^2
dp[i]表示i个数的答案
然后化简一下就可以分治ntt了
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5 + , P = ;
int n, k;
ll a[N], b[N], fac[N], inv[N], facinv[N], dp[N];
ll power(ll x, ll t)
{
ll ret = ;
for(; t; t >>= , x = x * x % P) if(t & ) ret = ret * x % P;
return ret;
}
void ntt(ll *a, int f)
{
for(int i = ; i < n; ++i)
{
int t = ;
for(int j = ; j < k; ++j) if(i >> j & ) t |= << (k - j - );
if(i < t) swap(a[i], a[t]);
}
for(int l = ; l <= n; l <<= )
{
ll w = power(, f == ? (P - ) / l : P - - (P - ) / l);
int m = l >> ;
for(int i = ; i < n; i += l)
{
ll t = ;
for(int k = ; k < m; ++k, t = t * w % P)
{
ll x = a[i + k], y = t * a[i + m + k];
a[i + k] = (x + y) % P;
a[i + m + k] = ((x - y) % P + P) % P;
}
}
}
if(f == -)
{
ll inv = power(n, P - );
for(int i = ; i < n; ++i) a[i] = a[i] * inv % P;
}
}
void cdq(int l, int r)
{
if(l == r) return;
int mid = (l + r) >> ;
cdq(l, mid);
n = ;
k = ;
while(n <= r - l + ) n <<= , ++k;
for(int i = ; i < n; ++i) a[i] = b[i] = ;
for(int i = l; i <= mid; ++i) a[i - l] = dp[i] * facinv[i] % P;
for(int i = ; i <= r - l; ++i) b[i] = (ll)i * i % P;
ntt(a, );
ntt(b, );
for(int i = ; i < n; ++i) a[i] = a[i] * b[i] % P;
ntt(a, -);
for(int i = mid + ; i <= r; ++i) dp[i] = (dp[i] + a[i - l] * fac[i - ] % P) % P;
cdq(mid + , r);
}
int main()
{
inv[] = inv[] = facinv[] = fac[] = ;
for(int i = ; i < N; ++i)
{
if(i != ) inv[i] = (P - P / i) * inv[P % i] % P;
facinv[i] = facinv[i - ] * inv[i] % P;
fac[i] = fac[i - ] * i % P;
}
dp[] = ;
cdq(, );
while(scanf("%d", &n) != EOF)
{ printf("%lld\n", dp[n]);
}
return ;
}
hdu5530的更多相关文章
随机推荐
- Spring集成JDBC
不同spring版本合成的方式,有时候不一样,需要查看帮助文档来看如何集成,帮助文档在spring发行包中. 1.导入spring的包(这里吧Spring-3.1.3 Release的所有jar包都导 ...
- AtomicInteger在实际项目中的应用
AtomicInteger.一个提供原子操作的Integer的类. 在Java语言中,++i和i++操作并非线程安全的.在使用的时候,不可避免的会用到synchronized关键字. 而AtomicI ...
- 使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像)
系列目录 kubernetes简介 Kubernetes节点架构图: kubernetes组件架构图: 准备基础环境 我们将使用kubeadm部署3个节点的 Kubernetes Cluster,整体 ...
- Bootstrap Table 查询(服务器端)、刷新数据
Refresh from url after use data option <!DOCTYPE html> <html> <head> <title> ...
- MacBook Pro使用初体验之Mac快捷键汇总(持续更新中)
我于近日购置了一台13寸的MacBook Pro高配,打算開始进行iOS开发的学习.Pro的配置情况例如以下: (1)OS X Yosemite ,版本号10.10.3 (2)Retina显示屏,13 ...
- iphone开发的技巧
一,改动状态栏: 1.增加[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];但此方法仅仅是不显示状态条,状态 ...
- EasyDarwin开源流媒体服务器支持basic基本认证和digest摘要认证解析
本文转自EasyDarwin开源团队成员ss的博客:http://blog.csdn.net/ss00_2012/article/details/52262621 RTSP认证作为RTSP标准协议的一 ...
- EasyDarwin开源流媒体服务器如何实现按需推送直播的
--本文转自EasyDarwin开源团队成员邵帅的博客:http://blog.csdn.net/ss00_2012/article/details/51441753 我们使用EasyDarwin的推 ...
- EasyDarwin流媒体云平台架构
EasyDarwin目前正在做的开源流媒体云平台架构:
- 什么是 CAS 机制?
1.Synchronized关键字 Synchronized关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁资源后恢复为RUNNABLE状态,这个过程中涉及到操作系统用户模式和内核 ...