洛谷 P3338 [ZJOI2014]力 fft

原创 2018年04月16日 10:09:08

题目描述

洛谷 P3338

分析:其实很简单啦,就是fft模板题。主要是这样一种形式
f[i]=sum(g[j]*h[i-j])
然后把g*h用fft跑出来,系数就是f[i]

代码:

// luogu-judger-enable-o2
#include <iostream>
#include <cstdio>
#include <cmath>

const int maxn=3e5+7;
const double pi=acos(-1);

using namespace std;

struct rec{
    double x,y;
};

rec operator + (rec a,rec b)
{
    return (rec){a.x+b.x,a.y+b.y};
}

rec operator - (rec a,rec b)
{
    return (rec){a.x-b.x,a.y-b.y};
}

rec operator * (rec a,rec b)
{
    return (rec){a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x};
}

int n,m;
rec a[maxn],b[maxn],c[maxn];
int r[maxn],l,p;

void fft(rec *a,int f)
{
    for (int i=0;i<l;i++)
    {
        if (r[i]>i) swap(a[i],a[r[i]]);
    }
    for (int i=2;i<=l;i*=2)
    {
        rec wn=(rec){cos(2*pi/i),f*sin(2*pi/i)};
        for (int j=0;j<l;j+=i)
        {
            rec w=(rec){1,0};
            for (int k=0;k<i/2;k++)
            {
                rec u=a[j+k],v=w*a[j+k+i/2];
                a[j+k]=u+v;
                a[j+k+i/2]=u-v;
                w=w*wn;
            }
        }
    }
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%lf",&a[i].x);
        b[n-i+1].x=a[i].x;
        c[i].x=(double)1/i/i;
    }
    l=1;p=0;
    while (l<=(n*2)) l*=2,p++;
    for (int i=0;i<l;i++) r[i]=((r[i>>1]>>1)|((i&1)<<(p-1)));
    fft(a,1); fft(b,1); fft(c,1);
    for (int i=0;i<l;i++)
    {
        a[i]=a[i]*c[i];
        b[i]=b[i]*c[i];
    }
    fft(a,-1); fft(b,-1);
    for (int i=0;i<l;i++)
    {
        a[i].x=a[i].x/l;
        b[i].x=b[i].x/l;
    }
    for (int i=1;i<=n;i++) printf("%.3lf\n",a[i].x-b[n-i+1].x);
}
版权声明:2333 https://blog.csdn.net/liangzihao1/article/details/79956958

【BZOJ】【P3527】【ZJOI2014】【力】【题解】【FFT】

传送门 www.lydsy.com/JudgeOnline/problem.php?id=3527
  • u012732945
  • u012732945
  • 2014-05-09 21:03:56
  • 1290

BZOJ 3527 [Zjoi2014]力 FFT

BZOJ 3527 [Zjoi2014]力 FFT
  • wzq_QwQ
  • wzq_QwQ
  • 2015-09-01 11:33:33
  • 2105

bzoj 3527: [Zjoi2014]力 (FFT)

题目描述传送门给出nn个数qiq_i,给出FjF_j的定义如下: Fj=∑ijqiqj(i−j)2F_j=\sum\limits_{i < j}{q_iq_j \over (i-j)^2}-\sum...
  • clover_hxy
  • clover_hxy
  • 2017-02-22 15:40:43
  • 492

[ZJOI2014]力 题解

FFT
  • WT_cnyali
  • WT_cnyali
  • 2017-07-23 19:51:25
  • 440

【ZJOI2014】力

DescriptionSolution这是第一次打FFT,对于一个新算法,有模板题可以打还是吼开心的。 很明显的要把上面的><和qi给化掉。然后因为有要往后取得,所以把原序列翻转一下后面的放到前面来...
  • doyouseeman
  • doyouseeman
  • 2017-02-16 15:41:52
  • 680

洛谷 P3338 [ZJOI2014]力(bzoj P3527 [ZJOI2014]力)

传送门 很难受,不会输公式,于是手写了一份,比较丑,希望不要介意。fft的套路果然深。。照着网上模板学习了一下。。 代码: #include #include #include #inc...
  • Leo_Riddle
  • Leo_Riddle
  • 2017-07-14 15:43:38
  • 166

BZOJ 3527: [Zjoi2014]力

题目地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题目大意:见原题。 算法讨论:         设A[i]=q[i],B[...
  • u013703661
  • u013703661
  • 2014-05-05 16:06:12
  • 2966

[bzoj3527][ZJOI2014]力

3527: [Zjoi2014]力Time Limit: 30 Sec Memory Limit: 256 MBSec Special Judge Submit: 863 Solved: 53...
  • FZHvampire
  • FZHvampire
  • 2016-01-10 21:11:18
  • 493

BZOJ3527: [Zjoi2014]力

题目大意:Fj=∑ijqiqj(i−j)2F_{j}=\sum\limits_{ij}\frac{q_{i}q_{j}}{(i-j)^2} 令Ei=Fi/qiE_{i}=F_{i}/...
  • commonc
  • commonc
  • 2016-08-12 09:33:44
  • 352

【BZOJ 3527】 [Zjoi2014]力

FFT模板题~
  • Regina8023
  • Regina8023
  • 2015-04-07 01:00:36
  • 1337
收藏助手
不良信息举报
您举报文章:洛谷 P3338 [ZJOI2014]力 fft
举报原因:
原因补充:

(最多只允许输入30个字)