Submission #6898563


Source Code Expand

#include <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < (n); i++)
#define int long long
#define double long double
#define all(a) a.begin(), a.end()
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
using namespace std;

namespace FastFourierTransform{
    using Com = complex<double>;
    void DiscreteFourierTransform(vector<Com> &F, int inverse){
        int sz = (int)F.size(), half = sz / 2;
        if(sz == 1)return;
        vector<Com> former(half), latter(half);
        rep(i, half){
            former[i] = F[i << 1];
            latter[i] = F[i << 1 | 1];
        }
        DiscreteFourierTransform(former, inverse);
        DiscreteFourierTransform(latter, inverse);
        Com now = 1, sone = polar(1.0, inverse * 2 * acos(-1.0) / sz);
        rep(i, sz){
            F[i] = former[i & (half - 1)] + now * latter[i & (half - 1)];
            now *= sone;
        }
    }
    vector<int> Multiply(const vector<int>& A, const vector<int>& B){
        int sz = 1, newsize = (int)A.size() + (int)B.size() - 1;
        while(sz < newsize)sz <<= 1;
        vector<Com> F(sz), G(sz);
        rep(i, (int)A.size())F[i] = A[i];
        rep(i, (int)B.size())G[i] = B[i];
        DiscreteFourierTransform(F, 1);
        DiscreteFourierTransform(G, 1);
        rep(i, sz)F[i] *= G[i];
        DiscreteFourierTransform(F, -1);
        rep(i, sz)F[i] /= sz;
        vector<int> X(newsize);
        rep(i, newsize)X[i] = F[i].real() + 0.5;
        return X;
    }
};

signed main(void){

    int n; cin >> n;
    vector<int> a(n), b(n);
    rep(i, n)cin >> a[i] >> b[i];

    vector<int> c = FastFourierTransform::Multiply(a, b);
    cout << 0 << endl;
    for(int i : c)cout << i << endl;
    return 0;

}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User KoD
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1905 Byte
Status AC
Exec Time 1553 ms
Memory 34688 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 1 ms 256 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 2 ms 256 KB
01_06_15 AC 1 ms 256 KB
01_07_39 AC 2 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 2 ms 256 KB
01_12_11 AC 1 ms 256 KB
01_13_28 AC 1 ms 256 KB
01_14_41 AC 2 ms 256 KB
01_15_26 AC 1 ms 256 KB
01_16_49 AC 2 ms 256 KB
01_17_34 AC 2 ms 256 KB
01_18_02 AC 1 ms 256 KB
01_19_33 AC 2 ms 256 KB
01_20_29 AC 1 ms 256 KB
02_00_51254 AC 756 ms 17536 KB
02_01_82431 AC 1490 ms 34364 KB
02_02_17056 AC 337 ms 8764 KB
02_03_34866 AC 697 ms 17280 KB
02_04_6779 AC 88 ms 2432 KB
02_05_65534 AC 805 ms 17724 KB
02_06_65535 AC 808 ms 17724 KB
02_07_65536 AC 807 ms 17724 KB
02_08_65537 AC 1432 ms 34108 KB
02_09_65538 AC 1432 ms 34108 KB
02_10_100000 AC 1553 ms 34688 KB