http://acm.hdu.edu.cn/showproblem.php?pid=5730

分治FFT模板。

DP:\(f(i)=\sum\limits_{j=0}^{i-1}f(j)\times a(i-j)\)

递推第i位时要用到0到i-1位,cdq套FFT,考虑每一位上f的贡献即可。

时间复杂度\(O(n\log^2n)\)。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N = 200003;
const int p = 313;
double Pi = acos(-1); struct cp {
double r, i;
cp(double _r = 0, double _i = 0) : r(_r), i(_i) {}
cp operator + (const cp &x) {return cp(r + x.r, i + x.i);}
cp operator - (const cp &x) {return cp(r - x.r, i - x.i);}
cp operator * (const cp &x) {return cp(r * x.r - i * x.i, r * x.i + i * x.r);}
} S[N]; void DFT(cp *A, int *rev, int n, int flag) {
for (int i = 0; i < n; ++i) S[rev[i]] = A[i];
for (int i = 0; i < n; ++i) A[i] = S[i];
for (int len = 2; len <= n; len <<= 1) {
int mid = len >> 1; cp wn = cp(cos(Pi / mid), sin(Pi / mid) * flag);
for (int i = 0; i < n; i += len) {
cp w = cp(1, 0);
for (int j = 0; j < mid; ++j) {
cp u = A[i + j], t = A[i + j + mid] * w;
A[i + j] = u + t;
A[i + j + mid] = u - t;
w = w * wn;
}
}
}
if (flag == -1) for (int i = 0; i < n; ++i) A[i].r /= n;
} cp A[N], B[N]; int n, a[N], f[N], rev[N]; void cdq(int l, int r) {
if (l == r) return;
int mid = (l + r) >> 1;
cdq(l, mid); int len = r - l + 1, fn = 1, c0 = 0;
while (fn < len) fn <<= 1, ++c0; for (int i = 0; i < fn; ++i) {
int num = i, &res = rev[i]; res = 0;
for (int j = 0; j < c0; ++j, num >>= 1) {
res <<= 1;
if (num & 1) res |= 1;
}
}
for (int i = l; i <= mid; ++i) A[i - l] = cp(f[i], 0);
for (int i = mid + 1 - l; i < fn; ++i) A[i] = cp(0, 0);
for (int i = 0; i < len; ++i) B[i] = cp(a[i], 0);
for (int i = len; i < fn; ++i) B[i] = cp(0, 0); DFT(A, rev, fn, 1);
DFT(B, rev, fn, 1);
for (int i = 0; i < fn; ++i) A[i] = A[i] * B[i];
DFT(A, rev, fn, -1); for (int i = mid + 1; i <= r; ++i) (f[i] += ((int)(A[i - l].r + 0.5))) %= p;
cdq(mid + 1, r);
} int main() {
while (true) {
scanf("%d", &n); if (!n) break;
memset(a, 0, sizeof(a));
memset(f, 0, sizeof(f));
for (int i = 1; i <= n; ++i) scanf("%d", a + i), a[i] %= p;
f[0] = 1;
cdq(0, n);
printf("%d\n", f[n]);
}
return 0;
}

【HDU 5730】Shell Necklace的更多相关文章

  1. HDU - 5730 :Shell Necklace(CDQ分治+FFT)

    Perhaps the sea‘s definition of a shell is the pearl. However, in my view, a shell necklace with n b ...

  2. 【HDU5730】Shell Necklace(多项式运算,分治FFT)

    [HDU5730]Shell Necklace(多项式运算,分治FFT) 题面 Vjudge 翻译: 有一个长度为\(n\)的序列 已知给连续的长度为\(i\)的序列装饰的方案数为\(a[i]\) 求 ...

  3. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  4. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  5. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  6. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  7. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  8. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  9. 【HDU5730】 Shell Necklace

    HDU5730 Shell Necklace 题目大意 已知连续i(1<=i<=n)个贝壳组合成一段项链的方案数a[i],求组合成包含n个贝壳的项链的总方案数. Solution cdq分 ...

随机推荐

  1. 【NOIP】提高组2015 斗地主

    [题意]按照斗地主出牌规则,给定手牌求出完的最少步数. [算法]模拟+搜索 [题解] 可以发现除了顺子,其它的出牌规则都和点数无关,只与同点数的牌数有关. 所以可以先暴力枚举要出哪些顺子,然后每一个出 ...

  2. 【51NOD-0】1085 背包问题

    [算法]背包DP [题解]f[j]=(f[j-w[i]]+v[i]) 记得倒序(一个物品只能取一次) #include<cstdio> #include<algorithm> ...

  3. 回顾一下MyBatis逆向工程——自动生成代码

    前言 最近做的项目(SSM+Shiro)的数据库表已经创建完成,一共有15张表,如果我们一个个去写pojo/bean的代码以及各种sql语句的话未免太过麻烦而且很容易出错,这个时候我们就需要MyBat ...

  4. Vuejs - 深入浅出响应式系统

    Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 Javascript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接,不过理解其工作原理同样非常重要,这样 ...

  5. 高精度模板_C++

    高精度压位,压9位 read:读入 write:输出 copy:赋值 change:交换 empty:清0 cmp:比较大小,相当于小于号 plus:加法 dec:减法 multy:乘法 除法实在不会 ...

  6. idea ssm框架搭建

    1.分享一篇完整的ssm框架搭建连接 大牛博客:https://www.cnblogs.com/toutou/p/ssm_spring.html#_nav_0 2.我的搭建的完整项目连接,可以进入我的 ...

  7. [IOS]Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ 百度云盘下载地址 http:// ...

  8. JS 控制页面刷新

    .页面自动刷新:把如下代码加入<head>区域中 <meta http-equiv=">,其中20指每隔20秒刷新一次页面. .页面自动跳转:把如下代码加入<h ...

  9. nginx 伪静态rewrite

    location正则写法 一个示例:   location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所 ...

  10. Centos 7 smb 安装使用

    安装: yum install samba 添加smb用户: smbpasswd -a root /etc/samba/smb.conf 追加: [public] path = / valid use ...