BZOJ3527 推出卷积公式FFT求值

传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3527

题意:

\(F_{j}=\sum_{i<j} \frac{q_{i} q_{j}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i} q_{j}}{(i-j)^{2}}\)

求\(E_i=F_i/q_i\)

题解:

推公式:
\[ E_i=F_i/q_i\\ E_i=\sum_{j=i}^{n}\frac{q_j}{(i-j)^2}-\sum_{j=0}^{i}\frac{q_j}{(i-j)^2}\\ 设函数f(i)为q_i,g(i)为(i)^2\\ \sum_{i=0}^{j} f_{i} * g_{j-i}\\ \begin{array}{l}{\sum_{i>j} \frac{q_{i}}{(i-j)^{2}}=\sum_{i=j}^{n} \frac{q_{i}}{(i-j)^{2}}} {=\sum_{i=0}^{n-j} \frac{q_{n-i}}{(j-i)^{2}}=\sum_{i=0}^{n-j} f_{n-i} * g_{i-j}}\end{array} \]

于是我们求出f和g 后fft,然后求值即可

代码:

#include <set>
#include <map>
#include <cmath>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
typedef unsigned long long uLL;
#define ls rt<<1
#define rs rt<<1|1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define bug printf("*********\n")
#define FIN freopen("input.txt","r",stdin);
#define FON freopen("output.txt","w+",stdout);
#define IO ios::sync_with_stdio(false),cin.tie(0)
#define debug1(x) cout<<"["<<#x<<" "<<(x)<<"]\n"
#define debug2(x,y) cout<<"["<<#x<<" "<<(x)<<" "<<#y<<" "<<(y)<<"]\n"
#define debug3(x,y,z) cout<<"["<<#x<<" "<<(x)<<" "<<#y<<" "<<(y)<<" "<<#z<<" "<<z<<"]\n"
const int maxn = 1e6 + 5;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const double Pi = acos(-1.0);
LL quick_pow(LL x, LL y) {LL ans = 1;while(y) {if(y & 1) {ans = ans * x % mod;} x = x * x % mod;y >>= 1;} return ans;
}
struct complex {double x, y;complex(double xx = 0, double yy = 0) {x = xx, y = yy;}
} f[maxn], f1[maxn], g[maxn];
complex operator + (complex a, complex b) {return complex(a.x + b.x, a.y + b.y);
}
complex operator - (complex a, complex b) {return complex(a.x - b.x, a.y - b.y);
}
complex operator * (complex a, complex b) {return complex(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}int n, m;
int l, r[maxn];
int limit = 1;
void fft(complex *A, int type) {for(int i = 0; i < limit; i++) {if(i < r[i]) swap(A[i], A[r[i]]);}for(int mid = 1; mid < limit; mid <<= 1) {complex Wn(cos(Pi / mid), type * sin(Pi / mid));for(int R = mid << 1, j = 0; j < limit; j += R) {complex w(1, 0);for(int k = 0; k < mid; k++, w = w * Wn) {complex x = A[j + k], y = w * A[j + mid + k];A[j + k] = x + y;A[j + k + mid] = x - y;}}}
}
int ans[maxn];
char numA[maxn], numB[maxn];
int main() {
#ifndef ONLINE_JUDGEFIN
#endifint n;while(scanf("%d", &n) != EOF) {n--;m = n * 2;for(int i = 0; i <= n; i++) {scanf("%lf", &f[i].x);// debug1(f[i].x);f1[n - i].x = f[i].x;}// bug;for(int i = 1; i <= n; i++) {g[i].x = (double)(1.0 / i / i);}while(limit <= m) limit <<= 1, l++;for(int i = 0; i <= limit; i++) {r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));}fft(f, 1);fft(f1, 1);fft(g, 1);for(int i = 0; i <= limit; i++) {f[i] = f[i] * g[i];}for(int i = 0; i <= limit; i++) {g[i] = f1[i] * g[i];}fft(f, -1);fft(g, -1);for(int i = 0; i <= limit; i++) {f[i].x = f[i].x / limit;}for(int i = 0; i <= limit; i++) {g[i].x = g[i].x / limit;}int t = m / 2;for(int i = 0; i <= t; i++) {printf("%.3f\n", f[i].x - g[n - i].x);}}return 0;
}

转载于:https://www.cnblogs.com/buerdepepeqi/p/11235411.html

BZOJ3527 推出卷积公式FFT求值相关推荐

  1. 【困难】公式字符串求值-Java

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程 package live.every.day.ProgrammingDesign.Codi ...

  2. 求二维函数Z=g(X,Y)型,用卷积公式求概率密度,积分区域如何确定(中)

    因为关于二维随机变量主题内容重要,难度大,例题多,最主要是积分区间的确定是难点,同时关联卷积概念,卷积公式容易,积分区间难以确定,因为书上的例题都没有详细解释积分区间如何确定,所以分成上中下三篇博客写 ...

  3. 用卷积公式求概率密度时确定积分区间

    卷积公式的推导过程书上有,不难理解.但是在解题时,确定积分区间很是头疼,本文讲解如何确定积分区间. 首先弄清f是什么,从定义入手,对于二维连续型随机变量(X,Y),Z=X+Y有  F(z)是一个二重积 ...

  4. 蓝桥杯-组合公式求值(java)

    算法提高 组合公式求值 时间限制:1.0s 内存限制:256.0MB问题描述给定n, m,求:输入格式输入一行,包含两个整数n, m.输出格式输出一行,包含求得的值,由于答案可能非常大,请输出此公式除 ...

  5. 2021牛客第一场H.Hash Function—FFT求差值的卷

    https://ac.nowcoder.com/acm/contest/11166/H 官方题解. 比赛时,我们都是用暴力写的,数据太弱了,今天突然想起来,用fft写了一下. 主要使用fft求差值的卷 ...

  6. java实现第四届蓝桥杯公式求值

    公式求值 输入n, m, k,输出图1所示的公式的值.其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如图2所示. 输入的第一行包含一个整数n:第二行包含一 ...

  7. 抛物线求积公式求积分算法matlab,数值计算实验报告---复合求积公式(梯形、抛物线、龙贝格)、导数求值(三点、四点、五点公式)...

    ----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy ··复合抛物线公式: ··龙贝格公式: 四.实验内容 ------1 实验题目 ...

  8. python求组合数c_python实现排列组合公式C(m,n)求值

    python实现排列组合公式C(m,n)求值 实验六 理解浮点数运算的误差 实验目的: 1.理解组合数定义式的化简 2.理解浮点数运算的误差可能带来的问题 错误代码 def func(m,n): re ...

  9. FFT求频谱图和功率谱密度图

    FFT求频谱图和功率谱密度图 频谱图 声音频率与能量的关系用频谱表示.在实际使用中,频谱图有三种,即线性振幅谱.对数振幅谱.自功率谱. 线性振幅谱的纵坐标有明确的物理量纲,是最常用的. 对数振幅谱中各 ...

  10. 浅谈(线性)卷积公式为什么要翻转

    浅谈(线性)卷积公式为什么要翻转 信号系统 信号处理 卷积 文章题目之所以写 (线性)卷积,是因为卷积有很多种,如循环卷积,周期卷积以及线性卷积.本文主要讨论线性卷积,为书写方便,下文都以卷积代替.至 ...

最新文章

  1. java中常见类型转换
  2. python编程培训多少钱-python培训一般多少钱?[python培训]
  3. 2.3.3 浮点数的加减运算与强制类型转换
  4. 给初级拍摄者的十条好建议
  5. CTF-汇编语言归纳
  6. 阿里巴巴2013年实习生笔试题A
  7. 如何调换antd中Modal对话框确认按钮和取消按钮两个按钮的位置
  8. CNN已老,GNN来了:重磅论文讲述深度学习的因果推理(附资源)
  9. Apizza-流程测试模式
  10. HZRecorder+科大讯飞语音转换文字
  11. 这就是为什么上帝和魔鬼都喜欢数学......
  12. port bridge enable命令导致的环路
  13. 资本资产定价模型CAPM
  14. 电子科技大学计算机专业考什么,2015年电子科技大学081203计算机应用技术考研专业目录及考试科目...
  15. 如何将caj转换成word?caj转Word工具
  16. ISACA最新高薪认证 | CDPSE数据隐私解决方案工程师
  17. CSS元素宽度、继承父元素宽度、cale函数计算宽度总结
  18. Maven在线仓库地址
  19. lo流知识(字节流 字符流)
  20. android是硬件还是软件,浅谈Android软硬件巧妙整合的开发技巧

热门文章

  1. web安全day5:DNS部署与安全
  2. 删除分卷php逻辑,Linux LVM(逻辑卷管理)删除详解
  3. php 图像居中裁剪函数,PHP 实现的自定义图像居中裁剪函数示例
  4. BGP中的环路和次优路径问题
  5. Linux网络管理相关命令详解
  6. telnet的基本配置(cisco、H3C、huawei 三个例子)
  7. python基础08
  8. 卫健委:不存在因流感引起大量坏死性脑病的现象
  9. MySQL多版本并发控制机制(MVCC)-源码浅析
  10. ubuntu 字符集与乱码