Submission #421381


Source Code Expand

#include <iostream>
#include <complex>
#include <vector>
using namespace std;

const int N = (1 << 18);
const double PI = acos(-1);
typedef complex<double> comp;

vector<comp> dft(vector<comp> f, int n, bool doesinv) {
  if (n == 1) return f;
  vector<comp> f0, f1;
  for (auto i=0; i<n/2; i++) {
    f0.push_back(f[2*i]);
    f1.push_back(f[2*i+1]);
  }
  f0 = dft(f0, n/2, doesinv);
  f1 = dft(f1, n/2, doesinv);
  comp zeta;
  if (!doesinv) {
    zeta = comp(cos(2 * PI/n), sin(2 * PI/n));
  } else {
    zeta = comp(cos(2 * PI/n), -1 * sin(2 * PI/n));
  }
  comp pow_zeta = comp(1, 0);
  for (auto i=0; i<n; i++) {
    f[i] = f0[i % (n/2)] + pow_zeta * f1[i % (n/2)];
    pow_zeta = pow_zeta * zeta;
  }
  return f;
}

vector<comp> multiply(vector<comp> g, vector<comp> h) {
  vector<comp> gg = dft(g, N, false);
  vector<comp> hh = dft(h, N, false);
  vector<comp> ff = vector<comp>(N);
  for (auto i=0; i<N; i++) {
    ff[i] = gg[i] * hh[i];
  }
  vector<comp> ans = dft(ff, N, true);
  for (auto i=0; i<N; i++) {
    ans[i] = ans[i] / comp(N, 0);
  }
  return ans;
}

int main() {
  int n;
  cin >> n;
  vector<comp> f = vector<comp>(N, comp(0, 0));
  vector<comp> g = vector<comp>(N, comp(0, 0));
  int a, b;
  for (auto i=0; i<n; i++) {
    cin >> a >> b;
    f[i] = comp(a, 0);
    g[i] = comp(b, 0);
  }
  vector<comp> h = multiply(f, g);
  cout << 0 << endl;
  for (auto i=0; i<(2 * n - 1); i++) {
    cout << round(h[i].real()) << endl;
  }
}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User kazunetakahashi
Language C++14 (Clang++ 3.4)
Score 0
Code Size 1519 Byte
Status WA
Exec Time 2235 ms
Memory 46080 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
AC × 1
AC × 22
WA × 11
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 1230 ms 46064 KB
01_00_01 AC 1203 ms 46072 KB
01_01_19 AC 1219 ms 45992 KB
01_02_31 AC 1209 ms 46072 KB
01_03_22 AC 1203 ms 46068 KB
01_04_31 AC 1212 ms 46068 KB
01_05_40 AC 1232 ms 46068 KB
01_06_15 AC 1214 ms 46068 KB
01_07_39 AC 1236 ms 46068 KB
01_08_28 AC 1214 ms 46068 KB
01_09_30 AC 1226 ms 46072 KB
01_10_23 AC 1212 ms 46080 KB
01_11_33 AC 1228 ms 45916 KB
01_12_11 AC 1230 ms 46072 KB
01_13_28 AC 1213 ms 46060 KB
01_14_41 AC 1212 ms 46080 KB
01_15_26 AC 1223 ms 46064 KB
01_16_49 AC 1226 ms 46068 KB
01_17_34 AC 1219 ms 46072 KB
01_18_02 AC 1204 ms 46016 KB
01_19_33 AC 1205 ms 45920 KB
01_20_29 AC 1210 ms 46068 KB
02_00_51254 WA 1778 ms 46072 KB
02_01_82431 WA 2106 ms 46072 KB
02_02_17056 WA 1393 ms 46068 KB
02_03_34866 WA 1567 ms 46064 KB
02_04_6779 WA 1293 ms 46076 KB
02_05_65534 WA 1955 ms 46068 KB
02_06_65535 WA 1958 ms 46068 KB
02_07_65536 WA 1933 ms 46068 KB
02_08_65537 WA 1883 ms 46072 KB
02_09_65538 WA 1862 ms 46072 KB
02_10_100000 WA 2235 ms 46072 KB