传送门

文章目录

  • 题意:
  • 思路:

题意:

思路:

这个式子看起来很FFTFFTFFT,让我们来化简一下。
考虑EEE中直接将qiq_iqi​约掉,所以Ei=∑j=1i−1qj(i−j)2−∑j=i+1nqj(i−j)2E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^{n}\frac{q_j}{(i-j)^2}Ei​=j=1∑i−1​(i−j)2qj​​−j=i+1∑n​(i−j)2qj​​
考虑将(i−j)2(i-j)^2(i−j)2简化成一个数组来抽象的代替他,并令fi=qi,gi=1i2f_i=q_i,g_i=\frac{1}{i^2}fi​=qi​,gi​=i21​,所以式子变成了Ei=∑j=1i−1fj∗gi−j−∑j=i+1nfj∗gj−iE_i=\sum_{j=1}^{i-1}f_j*g_{i-j}-\sum_{j=i+1}^nf_j*g_{j-i}Ei​=j=1∑i−1​fj​∗gi−j​−j=i+1∑n​fj​∗gj−i​
可以发现前部分就是一个卷积形式,直接卷一下即可,对于后部分我们还需要处理一下,向卷积的式子转换。
∑j=i+1nfj∗gj−i=∑j=1n−ifi+jgj\sum_{j=i+1}^nf_j*g_{j-i}=\sum_{j=1}^{n-i}f_{i+j}g_jj=i+1∑n​fj​∗gj−i​=j=1∑n−i​fi+j​gj​
看到n−in-in−i之后,就可以萌生一个很经典的做法,就是将fff翻转一下,由于我们下标从111开始, 所以我们设f′[i]=f[n−i+1]f'[i]=f[n-i+1]f′[i]=f[n−i+1],所以式子变为了∑j=1n−ifi+jgj=∑j=1n−ifn−i−j−1′gj\sum_{j=1}^{n-i}f_{i+j}g_j=\sum_{j=1}^{n-i}f'_{n-i-j-1}g_jj=1∑n−i​fi+j​gj​=j=1∑n−i​fn−i−j−1′​gj​
考虑令t=n−i−1t=n-i-1t=n−i−1,所以式子变为∑j=1n−ifn−i−j−1′gj=∑i=1t+1ft−j′gj\sum_{j=1}^{n-i}f'_{n-i-j-1}g_j=\sum_{i=1}^{t+1}f'_{t-j}g_jj=1∑n−i​fn−i−j−1′​gj​=i=1∑t+1​ft−j′​gj​
这也是一个卷积形式,只需要偏移一个单位即可。
所以式子变成了Ei=∑j=1i−1fj∗gi−j−∑i=1t+1ft−j′gjE_i=\sum_{j=1}^{i-1}f_j*g_{i-j}-\sum_{i=1}^{t+1}f'_{t-j}g_jEi​=j=1∑i−1​fj​∗gi−j​−i=1∑t+1​ft−j′​gj​
直接正着反着卷一次即可。

// Problem: P3338 [ZJOI2014]力
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3338
// Memory Limit: 125 MB
// Time Limit: 3000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
double g[N],f[N],sf[N];struct FFT {double PI=acos(-1);int rev[N];int bit,limit;struct Complex {double x,y;void init() { x=y=0; }Complex operator + (const Complex& t) const { return {x+t.x,y+t.y}; }Complex operator - (const Complex& t) const { return {x-t.x,y-t.y}; }Complex operator * (const Complex& t) const { return {x*t.x-y*t.y,x*t.y+y*t.x}; } }a[N],b[N],c[N];void init(int n,int m) {int x=max(n,m)*2; bit=0;while((1<<bit)<=x) bit++;limit=1<<bit;for(int i=0;i<limit;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(bit-1));}void fft(Complex a[],int inv) {for(int i=0;i<limit;i++) if(i<rev[i]) swap(a[i],a[rev[i]]);for(int mid=1;mid<limit;mid<<=1) {Complex w1=Complex({cos(PI/mid),inv*sin(PI/mid)});for(int i=0;i<limit;i+=mid*2) {Complex wk=Complex({1,0});for(int j=0;j<mid;j++,wk=wk*w1) {Complex x=a[i+j],y=wk*a[i+j+mid];a[i+j]=x+y; a[i+j+mid]=x-y;}}}if(inv==-1) {for(int i=0;i<limit;i++) {a[i].x/=limit;a[i].y/=limit;}}}int solve(double *ans,double *x,int n,double *y,int m,double *z,int h) {for(int i=0;i<=n;i++) a[i].x=x[i];for(int i=0;i<=n;i++) b[i].x=y[i];for(int i=0;i<=n;i++) c[i].x=z[i];init(n,m); fft(a,1); fft(b,1); fft(c,1);for(int i=0;i<limit;i++) a[i]=a[i]*c[i];for(int i=0;i<limit;i++) b[i]=b[i]*c[i];fft(a,-1); fft(b,-1);for(int i=1;i<=n;i++) ans[i]=a[i].x-b[n-i+1].x;return n+m;}}FT;int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);cin>>n;for(int i=1;i<=n;i++) scanf("%lf",&f[i]),sf[n-i+1]=f[i];for(int i=1;i<=n;i++) g[i]=(1.0/(1ll*i*i));int len=FT.solve(f,f,n,sf,n,g,n);for(int i=1;i<=n;i++) printf("%.3f\n",f[i]);return 0;
}
/**/

P3338 [ZJOI2014]力 FFT + 推式子相关推荐

  1. P3338 [ZJOI2014]力 [FFT]

    P3338[ZJOI2014]力P3338 [ZJOI2014]力P3338[ZJOI2014]力 给出n个数qi,给出Fj的定义如下: Fj=∑i<jqiqj(i−j)2−∑i>jqiq ...

  2. P3338 [ZJOI2014]力 —— FFT

    题目链接:点我啊╭(╯^╰)╮ 题目大意: 解题思路: Ei=Fiqi=∑j=1i−1qj(i−j)2−∑j=i+1nqj(i−j)2E_i=\frac{F_i}{q_i} = \sum_{j=1}^ ...

  3. P3338 [ZJOI2014]力(FFT)

    P3338 [ZJOI2014]力 Fj=∑i=1j−1qi×qj(i−j)2−∑i=j+1nqi×qj(i−j)2Ej=∑i=1j−1qi(i−j)2−∑i=j+1nqi(i−j)2f(i)=qi, ...

  4. P3338 [ZJOI2014]力

    P3338 [ZJOI2014]力 卷积 + FFT 题意 思路 Code(921ms) 传送门: https://www.luogu.com.cn/problem/P3338 题意 Fj=∑i=1j ...

  5. [卷积系列] P3338 [ZJOI2014]力

    P3338 [ZJOI2014]力 Ej=Fjqj=∑i=1j−1qi(i−j)2−∑i=j+1nqi(i−j)2E_j= \frac{F_{j}}{q_{j}} =\sum_{i=1}^{j-1} ...

  6. BZOJ3527: [Zjoi2014]力 [FFT]

    化简之后,发现减号左边的式子是一个卷积.右边的式子,把一个函数倒序就是卷积,分别FFT,求解答案. 大佬blog: https://blog.csdn.net/kyleyoung_ymj/articl ...

  7. bzoj 3527 [Zjoi2014]力——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 把 q[ i ] 除掉.设 g[ i ] = i^2 ,有一半的式子就变成卷积了:另一 ...

  8. BZOJ.3527.[ZJOI2014]力(FFT)

    题目链接 \(Descripiton\) 给出\(q[\ ]\),\[F[j]=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_ ...

  9. BZOJ3527:[ZJOI2014]力(FFT)

    Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...

最新文章

  1. JS字符串 window.open() window.opener window.name window对象总结
  2. 巧用find命令清除系统垃圾
  3. 列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)...
  4. poj1740 A New Stone Game
  5. Leetcode-Median of Two Sorted Arrays
  6. Simulink之器件换流式电压型无源逆变电路
  7. node.js用get方式获取网页中的链接
  8. create显示中文乱码 qt_Ubuntu下Qt串口助手接收中文乱码问题
  9. 完成一个分析H264码流的工具
  10. 数据算法之快速排序(quickSort)的Java实现
  11. 一步步实现SDDC-逻辑交换与逻辑路由
  12. 2021年第一篇原创——Spring核心初探~
  13. mangle 打标签冲突
  14. Java中根据URL下载gif图片文件
  15. Javascript: IE中命名函数直接量的Bug?
  16. Java新职篇:声明一个变量
  17. USB转串口,JLINK驱动安装(亲测有效)
  18. Springboot项目调用阿里云语音服务案例【真实有用】
  19. grpc客户端调用接口报:too many colons in address 域名配置问题
  20. 人工智能成功与冠状病毒抗争,但个人隐私令人担忧

热门文章

  1. pads中如何设置等长_期货如何设置止损止盈避免交易中被套-期货学习
  2. 轮子一定要是圆的吗?
  3. 当代年轻人,都有些不成文的规定?
  4. 不同声音的传播速度会一样吗?
  5. 颜宁课题组再发Cell!1个月时间内4篇顶刊!
  6. 女生会 P 的可不仅仅是丰胸和瘦腿......
  7. 造作吧,Python快速入门!
  8. jpa 定义中间表实体_Spring Data JPA实体详解
  9. java换水_java-交流灌水之谁是水王?
  10. c语言格式字符If,C语言所有语句格式 C语言中的的if语句共有多少种格式?