Submission #421420


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 << llround(h[i].real()) << endl;
  }
}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User kazunetakahashi
Language C++14 (Clang++ 3.4)
Score 100
Code Size 1521 Byte
Status AC
Exec Time 1758 ms
Memory 46576 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 1260 ms 46512 KB
01_00_01 AC 1239 ms 46560 KB
01_01_19 AC 1255 ms 46460 KB
01_02_31 AC 1230 ms 46568 KB
01_03_22 AC 1227 ms 46568 KB
01_04_31 AC 1233 ms 46556 KB
01_05_40 AC 1368 ms 46576 KB
01_06_15 AC 1226 ms 46428 KB
01_07_39 AC 1242 ms 46568 KB
01_08_28 AC 1234 ms 46456 KB
01_09_30 AC 1265 ms 46568 KB
01_10_23 AC 1257 ms 46564 KB
01_11_33 AC 1242 ms 46564 KB
01_12_11 AC 1265 ms 46576 KB
01_13_28 AC 1245 ms 46576 KB
01_14_41 AC 1248 ms 46564 KB
01_15_26 AC 1241 ms 46452 KB
01_16_49 AC 1231 ms 46572 KB
01_17_34 AC 1240 ms 46572 KB
01_18_02 AC 1232 ms 46568 KB
01_19_33 AC 1247 ms 46564 KB
01_20_29 AC 1235 ms 46572 KB
02_00_51254 AC 1591 ms 46576 KB
02_01_82431 AC 1697 ms 46564 KB
02_02_17056 AC 1338 ms 46572 KB
02_03_34866 AC 1409 ms 46560 KB
02_04_6779 AC 1272 ms 46564 KB
02_05_65534 AC 1566 ms 46568 KB
02_06_65535 AC 1571 ms 46564 KB
02_07_65536 AC 1619 ms 46576 KB
02_08_65537 AC 1587 ms 46568 KB
02_09_65538 AC 1577 ms 46564 KB
02_10_100000 AC 1758 ms 46564 KB