Submission #1356910


Source Code Expand

#include<algorithm>
#include<cmath>
#include<complex>
#include<iomanip>
#include<iostream>
#include<map>
#include<numeric>
#include<queue>
#include<set>
#include<sstream>
#include<unordered_map>
#include<unordered_set>
#include<vector>
using namespace std;
using uint = unsigned int;
using ll = long long;
const int M = 1e9 + 7;
const ll MLL = 1e18L + 9;
#pragma unused(M)
#pragma unused(MLL)
#ifdef LOCAL
#include"rprint.hpp"
#else
template <ostream& out = cout, class... T> void prints(T&&...){ }
template <ostream& out = cout, class... T> void printd(T&&...){ }
template <ostream& out = cout, class... T> void printb(T&&...){ }
template <ostream& out = cout, class... T> void printArr(T&&...){ }
#endif

using comp = complex<double>;

comp xi(int i, int n){
    return {cos(2 * M_PI * i / n), sin(2 * M_PI * i / n)};
}

auto dft(vector<comp>& cs, int n, bool rev = false, bool fin = false){
    vector<comp> ret(n);
    for(int i = 0; i < n; i++){
        comp acc = 1, x = xi((rev ? -i : i), n);
        for(auto c : cs){
            ret[i] += c * acc;
            acc *= x;
        }
        ret[i] /= (fin ? n : 1.0);
    }
    return ret;
}

vector<comp> fft(vector<comp>& cs, int n, bool rev = false, bool fin = false){
    vector<comp> ret(n), e, o;
    for(uint i = 0; i < cs.size(); i++){
        ((i & 1) ? o : e).push_back(cs[i]);
    }
    if(n == 1){
        ret[0] = cs.size() ? cs[0] : 0;
    }else{
        auto e2 = fft(e, n / 2, rev),
             o2 = fft(o, n / 2, rev);
        double den = fin ? n : 1;
        int revc = rev ? -1 : 1;
        for(int i = 0; i < n; i++){
            int idx = i % (n / 2);
            ret[i] = (e2[idx] + xi(revc * i, n) * o2[idx]) / den;
        }
    }
    return ret;
}

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n; cin >> n;
    vector<double> as(n), bs(n);
    vector<comp> gs(n), hs(n);
    for(int i = 0; i < n; i++){
        int a, b;
        cin >> a >> b;
        gs[i] = a;
        hs[i] = b;
    }
    int ceiln = 0;
    for(int i = 30; i >= 0; i--){
        if((2 * n + 1) & (1 << i)){
            ceiln = 1 << (i + 1);
            break;
        }
    }
    printd(ceiln);
    auto g2 = fft(gs, ceiln);
    auto h2 = fft(hs, ceiln);
    // auto g3 = dft(g2, ceiln, true);
    // auto h3 = dft(h2, ceiln, true);
    // printd(gs, g3);
    // printd(hs, h3);
    for(int i = 0; i < ceiln; i++){
        g2[i] = g2[i] * h2[i];
    }
    auto gh0 = fft(g2, ceiln, true, true);
    // prints(gh0);
    cout << 0 << '\n';
    for(int i = 0; i < 2 * n - 1; i++){
        cout << int(gh0[i].real() + 0.5) << '\n';
    }
    return 0;
}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User sumoooru
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2732 Byte
Status AC
Exec Time 1766 ms
Memory 33696 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 870 ms 17064 KB
02_01_82431 AC 1758 ms 32764 KB
02_02_17056 AC 405 ms 8240 KB
02_03_34866 AC 838 ms 16320 KB
02_04_6779 AC 96 ms 2384 KB
02_05_65534 AC 863 ms 17664 KB
02_06_65535 AC 858 ms 17660 KB
02_07_65536 AC 1731 ms 31984 KB
02_08_65537 AC 1732 ms 32052 KB
02_09_65538 AC 1725 ms 32036 KB
02_10_100000 AC 1766 ms 33696 KB