Submission #1991671


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,n)   FOR(i,0,n)
#define pb emplace_back
#define mp make_pair
typedef long long ll;
typedef pair<int,int> pint;

typedef complex<double> Comp;
const double PI=acos(-1.0);
const Comp I(0,1);
void fft(int n,vector<Comp> &a,bool inv=false){
    double zeta=(inv?-1:1)*2*PI/n;
    for(int m=n;m>=2;m>>=1){
        int mh=m>>1;
        rep(i,mh){
            Comp w=exp((double)i*zeta*I);
            for(int j=i;j<n;j+=m){
                int k=j+mh;
                Comp x=a[j]-a[k];
                a[j]+=a[k];
                a[k]=w*x;
            }
        }
        zeta*=2;
    }
    int i=0;
    FOR(j,1,n-1){
        for(int k=n>>1;k>(i^=k);k>>=1);
        if(j<i) swap(a[i],a[j]);
    }
    if(inv) rep(i,n) a[i]/=n;
}
void conv(vector<Comp> &v,vector<Comp> &w){
    int n=1,deg=v.size()+w.size()-1;
    while(n<deg) n<<=1;
    v.resize(n),w.resize(n);
    fft(n,v);fft(n,w);
    rep(i,n) v[i]*=w[i];
    fft(n,v,true);
}

int main(){
    int n;
    cin>>n;
    vector<Comp> a(n+1,0),b(n+1,0);
    FOR(i,1,n+1){
        cin>>a[i]>>b[i];
    }
    conv(a,b);
    FOR(i,1,2*n+1) cout<<(int)(a[i].real()+0.5)<<endl;
    return 0;
}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User ts_
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1289 Byte
Status AC
Exec Time 531 ms
Memory 10312 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 1
AC × 33
Set Name Test Cases
Sample 00_sample_01
All 00_sample_01, 01_00_01, 01_01_19, 01_02_31, 01_03_22, 01_04_31, 01_05_40, 01_06_15, 01_07_39, 01_08_28, 01_09_30, 01_10_23, 01_11_33, 01_12_11, 01_13_28, 01_14_41, 01_15_26, 01_16_49, 01_17_34, 01_18_02, 01_19_33, 01_20_29, 02_00_51254, 02_01_82431, 02_02_17056, 02_03_34866, 02_04_6779, 02_05_65534, 02_06_65535, 02_07_65536, 02_08_65537, 02_09_65538, 02_10_100000
Case Name Status Exec Time Memory
00_sample_01 AC 6 ms 768 KB
01_00_01 AC 1 ms 256 KB
01_01_19 AC 1 ms 256 KB
01_02_31 AC 1 ms 256 KB
01_03_22 AC 1 ms 256 KB
01_04_31 AC 1 ms 256 KB
01_05_40 AC 1 ms 256 KB
01_06_15 AC 1 ms 256 KB
01_07_39 AC 1 ms 256 KB
01_08_28 AC 1 ms 256 KB
01_09_30 AC 1 ms 256 KB
01_10_23 AC 1 ms 256 KB
01_11_33 AC 1 ms 256 KB
01_12_11 AC 1 ms 256 KB
01_13_28 AC 1 ms 256 KB
01_14_41 AC 1 ms 256 KB
01_15_26 AC 1 ms 256 KB
01_16_49 AC 1 ms 256 KB
01_17_34 AC 1 ms 256 KB
01_18_02 AC 1 ms 256 KB
01_19_33 AC 1 ms 256 KB
01_20_29 AC 1 ms 256 KB
02_00_51254 AC 271 ms 5304 KB
02_01_82431 AC 463 ms 9960 KB
02_02_17056 AC 99 ms 2548 KB
02_03_34866 AC 207 ms 4920 KB
02_04_6779 AC 35 ms 1024 KB
02_05_65534 AC 320 ms 5504 KB
02_06_65535 AC 322 ms 5496 KB
02_07_65536 AC 398 ms 9592 KB
02_08_65537 AC 396 ms 9592 KB
02_09_65538 AC 397 ms 9592 KB
02_10_100000 AC 531 ms 10312 KB