提交记录 7789


用户 题目 状态 得分 用时 内存 语言 代码长度
HocRiser 1002. 测测你的多项式乘法 Wrong Answer 0 19.588 ms 64424 KB C++ 1.18 KB
提交时间 评测时间
2019-01-25 10:05:21 2020-08-01 01:08:32
#include<cmath>
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
using namespace std;

const int N=3000010;
const double pi=acos(-1.);
char s1[N],s2[N];
int n,m,L,x,tmp[10],rev[N];
struct C{ double x,y; }a[N],b[N];

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

void FFT(C a[],int f){
    rep(i,0,n-1) if (i<rev[i]) swap(a[i],a[rev[i]]);
    for (int i=1; i<n; i<<=1){
        C wn=(C){cos(pi/i),f*sin(pi/i)};
        for (int p=i<<1,j=0; j<n; j+=p){
            C w=(C){1,0};
            for (int k=0; k<i; k++,w=w*wn){
                C x=a[j+k],y=w*a[i+j+k]; a[j+k]=x+y; a[i+j+k]=x-y;
            }
        }
    }
}

void poly_multiply(unsigned *a1, int n, unsigned *b1, int m, unsigned *c){
    rep(i,0,n) a[i].x=a1[i];
    rep(i,0,m) b[i].x=b1[i];
    m=n+m; for (n=1; n<=m; n<<=1) L++;
    rep(i,0,n-1) rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));
    rep(i,0,n) a[i]=(C){a[i].x+b[i].x,a[i].x-b[i].x};
    FFT(a,1);
    rep(i,0,n-1) a[i]=a[i]*a[i];
    FFT(a,-1);
    rep(i,0,m) c[i]=a[i].x/n/4+0.5;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #119.588 ms62 MB + 936 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-07 20:35:01 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠