Luogu4191:[CTSC2010]性能优化
传送门
题目翻译:给定两个 \(n\) 次多项式 \(A,B\) 和一个整数 \(C\),求 \(A\times B^C\) 在模 \(x^n\) 意义下的卷积
显然就是个循环卷积,所以只要代入 \(\omega_n^{k}\) 进去求出点值,然后插值就好了
???\(n\) 不是 \(2^k\) 的形式,不能直接 \(NTT\)
怎么办呢?
根据题目性质,可以把 \(n\) 拆成 \(2^{a_1}3^{a_2}5^{a_3}7^{a_4}\) 的形式
这启示我们每次不是每次分成两半而是拆分成 \(3/5/7\) 次,然后再合并点值
设 \(F(x)=\sum a_ix^i,F_r(x)=\sum a_{ip+r}x^i\)
那么 \(F(x)=\sum x^rF(x^p)\)
根据单位复数的性质(消去引理和折半引理)那么
\]
那么只需要写一个每次分 \(p\) 份的 \(FFT\) 就好了
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn(5e5 + 5);
int n, c, a[maxn], b[maxn], tmp[maxn], g, pri[233333], tot, pw[2][maxn], mod, r[maxn];
inline int Pow(ll x, int y) {
register ll ret = 1;
for (; y; y >>= 1, x = x * x % mod)
if (y & 1) ret = ret * x % mod;
return ret;
}
inline void Inc(int &x, int y) {
x = x + y >= mod ? x + y - mod : x + y;
}
int Dfs(int s, int p, int cur, int blk) {
if (cur == tot + 1) return s + p;
register int nxt;
nxt = blk / pri[cur];
return Dfs(s + nxt * (p % pri[cur]), (p - p % pri[cur]) / pri[cur], cur + 1, nxt);
}
inline void DFT(int *p, int opt) {
register int i, j, k, l, q, t, cur;
for (i = 0; i < n; ++i) tmp[r[i]] = p[i];
for (i = 0; i < n; ++i) p[i] = tmp[i], tmp[i] = 0;
for (i = 1, cur = tot; i < n; i *= pri[cur], --cur) {
for (t = i * pri[cur], j = 0; j < n; j += t)
for (k = 0; k < t; k += i)
for (l = 0; l < i; ++l)
for (q = 0; q < pri[cur]; ++q)
Inc(tmp[j + k + l], (ll)pw[opt == -1][n / t * (k + l) * q % n] * p[j + i * q + l] % mod);
for (j = 0; j < n; ++j) p[j] = tmp[j], tmp[j] = 0;
}
if (opt == -1) for (c = Pow(n, mod - 2), i = 0; i < n; ++i) p[i] = (ll)p[i] * c % mod;
}
int main() {
register int i, j, x;
scanf("%d%d", &n, &c), mod = n + 1;
for (x = n, i = 2; i * i <= x; ++i)
while (x % i == 0) pri[++tot] = i, x /= i;
if (x > 1) pri[++tot] = x;
for (i = 2; ; ++i) {
for (g = i, j = 1; g && j <= tot; ++j)
if (Pow(g, n / pri[j]) == 1) g = 0;
if (g) break;
}
for (i = 0; i < n; ++i) scanf("%d", &a[i]);
for (i = 0; i < n; ++i) scanf("%d", &b[i]);
pw[0][0] = pw[1][0] = 1, pw[0][1] = g, pw[1][1] = Pow(g, mod - 2);
for (i = 2; i < n; ++i) pw[0][i] = (ll)pw[0][i - 1] * g % mod, pw[1][i] = (ll)pw[1][i - 1] * pw[1][1] % mod;
for (i = 0; i < n; ++i) r[i] = Dfs(0, i, 1, n);
DFT(a, 1), DFT(b, 1);
for (i = 0; i < n; ++i) a[i] = (ll)a[i] * Pow(b[i], c) % mod;
DFT(a, -1);
for (i = 0; i < n; ++i) printf("%d\n", a[i]);
return 0;
}
Luogu4191:[CTSC2010]性能优化的更多相关文章
- Luogu4191 [CTSC2010]性能优化【多项式,循环卷积】
题目描述:设$A,B$为$n-1$次多项式,求$A*B^C$在系数模$n+1$,长度为$n$的循环卷积. 数据范围:$n\leq 5*10^5,C\leq 10^9$,且$n$的质因子不超过7,$n+ ...
- [CTSC2010]性能优化
[CTSC2010]性能优化 循环卷积快速幂 两个注意点:n+1不是2^k*P+1形式,任意模数又太慢?n=2^k1*3^k2*5^k3*7^k4 多路分治!深刻理解FFT运算本质:分治,推式子得到从 ...
- 【Luogu4191】[CTSC2010] 性能优化
题目链接 题意简述 求循环卷积意义下的 \(A(x)*B(x)^C\). 模数为 n+1 ,长度为 n. Sol 板子题. 循环卷积可直接把点值快速幂来解决. 所以问题就是要快速 \(DFT\),由于 ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- Web性能优化:What? Why? How?
为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...
- Web性能优化:图片优化
程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...
- C#中那些[举手之劳]的性能优化
隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...
- JavaScript性能优化
如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...
随机推荐
- DataList用法总结
设计模版: 页眉<HeaderTemplate> </HeaderTemplate> 页脚<FooterTemplate> </FooterTemplat ...
- HDU-1260-Tickets(线性DP,DP入门)
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 架构师养成记--25.linux用户管理
用户管理配置文件用户信息文件:/etc/passwd密码文件:/etc/shadow用户配置文件:/etc/login.defs /etc/default/useradd新用户信息文件:/etc/sk ...
- vue 在 html 中自定义 tag
v-if,v-for,:key,:style,v-text,@click,:src,:poster,:class,:href
- json兼容ie8
今天遇到一个问题,后台传递过来的json对象,在前端解析的时候用JSON.parse(result)方法不好使,查了一下是因为ie浏览器的问题.然后在网上翻了翻,找到了这个办法,可以使这个函数在ie中 ...
- es6里class类
/** * Created by issuser on 2018/11/27. *///如果静态方法包含this关键字,这个this指的是类,而不是实例./** (1)类的实例属性 1.类的实例属性可 ...
- Mac下使用crontab来实现定时任务
说明: 1.Linux和Mac下操作crontab都是一致的 2.配置文件都在/etc/crontab下,如果没有就创建. 3.测试发现直接使用crontab -e命令创建的定时任务是放在临时文件夹的 ...
- Memcahe安装与配置
1.先启动Memcahe服务 (1)通过Memcahe文件夹下的memcahe.exe程序启动 (2)将Memcahe加到Windows服务中去 为了方便使用,大多数情况下,是使用第二种方式,来启动M ...
- 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装Theano(图文详解)
不多说,直接上干货! Theano的安装教程目前网上一搜很多,前几天折腾了好久,终于安装成功了Anaconda3(Python3)的Theano,嗯~发博客总结并分享下经验教训吧. 渣电脑,显卡用的是 ...
- PTA (Advanced Level) 1066 Root of AVL Tree
Root of AVL Tree An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of ...