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 |
|
|
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 |