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 ...
随机推荐
- 「工具」三分钟了解一款在线流程绘制工具:Whimsical
Whimsical 是一款在线流程绘制工具,只需要一个浏览器就随时随地绘制精美的流程图.除了流程图(Flowcharts)功能,官方还推出了线框图(Wireframes).便利贴(Sticky Not ...
- 【Hadoop & Ecilpse】Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=bruce, access=WRITE, inode="/out2/_temporary/0":atguigu:supergroup:drwxr-xr-x
问题再现: 使用本机 Ecilpse (Windows环境) 去访问远程 hadoop 集群出现以下异常: 问题原因: 因为远程提交的情况下如果没有 hadoop 的系统环境变量,就会读取当前主机的 ...
- vue二级路由跳转后外部引入js失效问题解决方案
vue路由可以通过children嵌套,于是可以形成二级路由等等... 案例如下: routes: [ { path: '/', name: 'dy', component: dy, children ...
- Vue 父子组件传递方式
问题: parent.vue <template> <div> 父组件 <child :childObject="asyncObject">&l ...
- C#-WebForm 如何获取下拉列表选中的值 jquery
分别使用javascript原生的方法和jquery方法<select id="test" name=""> <option value=&q ...
- 集合之五:Set接口(答案)
package com.shsxt.homework; import java.util.ArrayList; import java.util.Collection; import java.uti ...
- Access to the path ‘’ is denied
2019/4/29 问题:利用VS实现数据导出,出现Error:Access to the path 'F:\HPYMTotalCode\Web\dd\xmqjd.xls' is denied. 原因 ...
- xilinx DMA IP核(一) —— loop测试 代码注释
本篇笔记中的代码来自:米联科技的教程“第三季第一篇的DMA_LOOP环路测试” 硬件的连接如下图所示: 图:DMA Loop Block Design 橘色的线就是DMA加FIFO组成的一个LOOP循 ...
- 【html5】cookie、sessionStorage、localStorage
第四条补充: cookie中包含domain和path,所有向该域下该路径发送的请求头部都会包含这个cookie: session浏览器关闭后消失,只能由最初给对象存储数据的页面访 ...
- 《LeetBook》leetcode题解(8): String to Integer (atoi) [E]——正负号处理
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...