• bzoj3527: [Zjoi2014]力


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 using namespace std;
     7 const int maxn=400005;
     8 const double PI=acos(-1);
     9 struct node{
    10     double real,imag;
    11     void clear(){real=imag=0;}
    12     node operator +(const node &x){return (node){real+x.real,imag+x.imag};}
    13     node operator -(const node &x){return (node){real-x.real,imag-x.imag};}
    14     node operator *(const node &x){return (node){real*x.real-imag*x.imag,real*x.imag+imag*x.real};}
    15 }q[maxn],p[maxn],A[maxn],t1,t2,w,wn;
    16 int m,n,len,rev[maxn];
    17 int Rev(int x){
    18     int temp=0;
    19     for (int i=1;i<=len;i++){temp<<=1,temp+=(x&1),x>>=1;}
    20     return temp;
    21 }
    22 void FFT(node *a,int op){
    23     for (int i=0;i<n;i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
    24     for (int s=2;s<=n;s<<=1){
    25         wn=(node){cos(2.0*op*PI/s),sin(2.0*op*PI/s)};
    26         for (int i=0;i<n;i+=s){
    27             w=(node){1,0};
    28             for (int j=i;j<i+s/2;j++,w=w*wn){
    29                 t1=a[j],t2=w*a[j+s/2];
    30                 a[j]=t1+t2,a[j+s/2]=t1-t2;
    31             }
    32         }
    33     }
    34 }
    35 int main(){
    36     scanf("%d",&m); n=1,len=0;
    37     while (n<(m<<1)) n<<=1,len++;
    38     for (int i=0;i<n;i++) rev[i]=Rev(i);
    39     for (int i=0;i<n;i++) p[i].clear(),q[i].clear();
    40     for (int i=1;i<=m;i++) scanf("%lf",&q[i].real);
    41     for (int i=0;i<m;i++) p[i].real=-1.0/(i-m)/(i-m);
    42     p[m].real=0; for (int i=m+1;i<n;i++) p[i].real=1.0/(i-m)/(i-m);
    43     FFT(q,1),FFT(p,1);
    44     for (int i=0;i<n;i++) A[i]=q[i]*p[i];
    45     FFT(A,-1);
    46     for (int i=0;i<n;i++) A[i].real=1.0*A[i].real/n;
    47     for (int i=1;i<=m;i++) printf("%.3lf
    ",A[m+i].real);
    48     return 0;
    49 }
    50 
    View Code

    题目大意;题意上网找吧。

    做法:我们令A[i+n]=E[n],然后修改一个数组的定义,就是裸的卷积了,直接FFT,详见16年国家集训队论文。

  • 相关阅读:
    Spring jdbcTemplat 写入BLOB数据为空
    Android强制弹出,隐藏输入法.
    Android NDK开发篇(五):Java与原生代码通信(数据操作)
    AIX加入�能够telnet远程连接账号方法
    index of rmvb mp3 rm突破站点入口下载
    C++“窗体”程序设计启蒙(之二)
    C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
    (a*b)%c 小的技巧
    javascript(arguments)
    Cocos2dx 小技巧(十四)ScrollView实现缩放效果
  • 原文地址:https://www.cnblogs.com/OYzx/p/5877670.html
Copyright © 2020-2023  润新知