Submission #1554766


Source Code Expand

#include<bits/stdc++.h>

using namespace std;

typedef complex< double > C;
const double PI = acos(-1);

vector< C > DFT(vector< C > &f, int dir)
{
  if(f.size() == 1) return (f);
  auto n = f.size(), mid = f.size() >> 1;
  vector< C > f0(mid), f1(mid);
  for(int i = 0; i < mid; i++) f0[i] = f[2 * i + 0];
  for(int i = 0; i < mid; i++) f1[i] = f[2 * i + 1];
  f0 = DFT(f0, dir), f1 = DFT(f1, dir);
  C zeta = polar(1.0, 2 * PI * dir / n), pow_zeta(1.0);
  for(int i = 0; i < n; i++) {
    f[i] = f0[i < mid ? i : i - mid] + pow_zeta * f1[i < mid ? i : i - mid];
    pow_zeta *= zeta;
  }
  return (f);
}

vector< C > Multiply(vector< C > &g, vector< C > &h)
{
  int sz = 1;
  while(sz <= g.size() + h.size()) sz *= 2;
  g.resize(sz), h.resize(sz);
  auto gg = DFT(g, 1), hh = DFT(h, 1);
  vector< C > ff(sz);
  for(int i = 0; i < sz; i++) ff[i] = gg[i] * hh[i];
  auto get = DFT(ff, -1);
  for(int i = 0; i < sz; i++) get[i] /= sz;
  return (get);
}


int main()
{
  int N;
  cin >> N;
  vector< C > a(N + 1), b(N + 1);
  for(int i = 1; i <= N; i++) cin >> a[i] >> b[i];
  auto c = Multiply(a, b);
  for(int i = 1; i <= 2 * N; i++) cout << (int) round(real(c[i])) << endl;
}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User ei13333
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1223 Byte
Status AC
Exec Time 961 ms
Memory 34624 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 2 ms 256 KB
01_00_01 AC 1 ms 256 KB
01_01_19 AC 1 ms 256 KB
01_02_31 AC 2 ms 256 KB
01_03_22 AC 1 ms 256 KB
01_04_31 AC 2 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 483 ms 15404 KB
02_01_82431 AC 888 ms 34528 KB
02_02_17056 AC 205 ms 8672 KB
02_03_34866 AC 414 ms 15404 KB
02_04_6779 AC 61 ms 2432 KB
02_05_65534 AC 532 ms 15360 KB
02_06_65535 AC 828 ms 34544 KB
02_07_65536 AC 829 ms 34544 KB
02_08_65537 AC 821 ms 34544 KB
02_09_65538 AC 826 ms 34544 KB
02_10_100000 AC 961 ms 34624 KB