一道FFT

然而据说暴力可以水70分

然而我省选的时候看到了直接吓傻了  连暴力都没打

太弱了啊QAQ

emmmm

详细的拆开就看其他题解吧233

最后那一步卷积其实我一直没明白

后来画画图终于懂了

只要把其中一个反过来

多项式乘法的结果中的每一项系数就对应某一个Σx[i] * y[j] 的结果

前面几项是不完全的结果

但是太小了就被忽略啦

代码如下

/**************************************************************
Problem: 4827
User: cminus
Language: C++
Result: Accepted
Time:5644 ms
Memory:24568 kb
****************************************************************/ #include <cstdio>
#include <cmath>
#include <complex>
using namespace std; const int N = ;
typedef long long ll;
typedef complex<double> cp;
const double pi = acos(-1.0);
cp A[N], B[N]; void FFT(cp *y, int n, int type) {
if (n == ) return ;
cp l[n >> ], r[n >> ];
for (int i = ; i <= n; i++)
if (i & ) r[i >> ] = y[i];
else l[i >> ] = y[i];
FFT(l, n >> , type); FFT(r, n >> , type);
cp omegan(cos( * pi / n), sin( * pi * type / n)), omega(, );
for (int i = ; i < n >> ; i++) {
y[i] = l[i] + r[i] * omega;
y[i + (n >> )] = l[i] - r[i] * omega;
omega *= omegan;
}
} int main() {
int n, m, ans = , y = ;
scanf("%d %d", &n, &m);
for (int i = ; i < n; i++) {
int x; scanf("%d", &x);
A[n - i - ] = x;
ans += x * x;
}
for (int i = ; i < n; i++) {
int x; scanf("%d", &x);
B[i] = x;
ans += x * x;
y += (int)B[i].real() - A[n - i - ].real();
}
int n1; for (n1 = ; n1 <= n * ; n1 <<= );
for (int i = ; i < n; i++)
B[i + n] = B[i];
FFT(A, n1, ); FFT(B, n1, );
for (int i = ; i <= n1; i++)
A[i] *= B[i];
FFT(A, n1, -);
int temp = , z = (-y) / n;
for (int i = ; i < n; i++) temp = max(temp, (int)(A[i + n - ].real() / n1 + 0.5));
ans -= temp * ;
temp = z * z * n + y * z * ;
z += ; temp = min(temp, z * z * n + y * z * );
z -= ; temp = min(temp, z * z * n + y * z * );
// 有理有据的精度优化
ans += temp;
printf("%d\n", ans);
return ;
}

最新文章

  1. poj1061 Exgcd
  2. eclipse中 properties文件编码问题
  3. c++中二进制和整数转化
  4. JS-unicode编码转换
  5. 自己写了一个类似百度空间自动保存草稿的程序 php+jquery
  6. QNX 实时操作系统(Quick Unix)
  7. 图解:如何U盘装Win7系统(傻瓜式装机) + 分区步骤图解(用WIN7自带管理工具)
  8. 【注意事项】APP左右横滑设计
  9. [转载]PS各个工具的字母快捷键和英文全名
  10. git(windows)
  11. 简单使用Markdown
  12. MySQL Group Replication-MGR集群
  13. 试水Spring Cloud Hystrix
  14. [No000014D]chrome console 调试 引入 jquery等外部库
  15. 安装启动kafka
  16. 慎用 apt-get autoremove !
  17. [整理]C语言中字符常量与ASCII码
  18. ubuntu-15.04-desktop-i386.iso:ubuntu-15.04-desktop-i386:安装Oracle11gR2
  19. Python 3.x 连接 pymysql 数据库
  20. ospf几种lsa

热门文章

  1. vue组件之间传值
  2. Wannafly Winter Camp 2020 Day 5G Cryptographically Secure Pseudorandom Number Generator - 分块
  3. php安装xdebug扩展,PHPStorm+XDebug单步调试
  4. Android Studio阶段性学习总结_1
  5. 【手抖康复训练1 】Codeforces Global Round 6
  6. ansible笔记(15):循环(二)with_items/with_list/with_together/with_flattened
  7. Wannafly Camp 2020 Day 1F 乘法 - 字符串
  8. 判断是否网络连通 .net Ping
  9. [技术翻译]在现代JavaScript中编写异步任务
  10. mysql的优化总结