提交记录 5372


用户 题目 状态 得分 用时 内存 语言 代码长度
FancyDreams 1002i. 【模板题】多项式乘法 Accepted 100 70.627 ms 96344 KB C++ 1.94 KB
提交时间 评测时间
2018-08-20 19:21:53 2020-08-01 00:16:25

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<iterator>
#include<queue>
#include<cstdlib>
#include<vector>
#include<map>
#include<set>
#define PI 3.14159265358979323846
using namespace std;

struct Complex
{
    double r,i;
    Complex(double _x=0.0,double _y=0.0) { r=_x; i=_y; }
    Complex operator + (Complex& a) const { return Complex(r+a.r,i+a.i); }
    Complex operator - (Complex& a) const { return Complex(r-a.r,i-a.i); }
    Complex operator * (Complex& a) const { return Complex( r*a.r-i*a.i , r*a.i+i*a.r ); }
};

inline void readx(int& x)
{
    x=0; int k=1; register char ch=0;
    while (ch<'0' || ch>'9') { ch=getchar(); if (ch=='-') k=-1; }
    while (ch>='0' && ch<='9') { x=x*10+ch-'0'; ch=getchar(); }
    x*=k;
}

int rev[3000010]={0},revt=0; char revf=0;
inline void btfl(Complex y[],int len)
{
    if (!revf)
    {
        revf=1; revt--;
        for (int i=0;i<len;i++) rev[i]=( rev[i>>1]>>1 | ((i&1)<<revt) );
    }
    for (int i=0;i<len;i++) if (i<rev[i]) swap(y[i],y[rev[i]]);
}

inline void FaFaTa(Complex y[],int len,int mode)
{
    btfl(y,len);
    for (int i=1;i<len;i<<=1)
    {
        Complex wn( cos(PI/i) , mode* sin(PI/i) );
        for (int j=0;j<len;j+=(i<<1))
        {
            Complex w(1,0);
            for (int k=0;k<i;k++,w=w*wn)
            {
                Complex tx=y[j+k],ty=w*y[i+j+k];
                y[j+k]=tx+ty;
                y[i+j+k]=tx-ty;
            }
        }
    }
}

Complex A[3000010],B[3000010];
int n,m,Lim=1;

int main()
{
    readx(n); readx(m); register int cac=0;
    for (int i=0;i<=n;i++) { readx(cac); A[i].r=(double)cac; }
    for (int i=0;i<=m;i++) { readx(cac); B[i].r=(double)cac; }
    while (Lim<=n+m) Lim<<=1,revt++;
    
    FaFaTa(A,Lim,1); FaFaTa(B,Lim,1);
    for (int i=0;i<Lim;i++) A[i]=A[i]*B[i];
    FaFaTa(A,Lim,-1);
    
    for (int i=0;i<=m+n;i++) printf("%d ",(int)(A[i].r/Lim+0.5));
    printf("\n");
    return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #110.512 ms91 MB + 604 KBAcceptedScore: 0

Subtask #1 Testcase #270.627 ms94 MB + 8 KBAcceptedScore: 100

Subtask #1 Testcase #337.426 ms92 MB + 372 KBAcceptedScore: 0

Subtask #1 Testcase #437.974 ms92 MB + 360 KBAcceptedScore: 0

Subtask #1 Testcase #510.262 ms91 MB + 604 KBAcceptedScore: 0

Subtask #1 Testcase #610.796 ms91 MB + 604 KBAcceptedScore: 0

Subtask #1 Testcase #710.262 ms91 MB + 604 KBAcceptedScore: 0

Subtask #1 Testcase #864.627 ms93 MB + 764 KBAcceptedScore: 0

Subtask #1 Testcase #964.434 ms93 MB + 764 KBAcceptedScore: 0

Subtask #1 Testcase #1059.269 ms93 MB + 496 KBAcceptedScore: 0

Subtask #1 Testcase #1170.096 ms94 MB + 88 KBAcceptedScore: 0

Subtask #1 Testcase #1270.159 ms92 MB + 992 KBAcceptedScore: 0

Subtask #1 Testcase #1310.26 ms91 MB + 604 KBAcceptedScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2024-04-20 16:19:36 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用