Submission #17731754
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using lint = long long;
template<typename T> using V = vector<T>;
template<typename T> using VV = vector<vector<T>>;
#define all(v) (v).begin(),(v).end()
#define siz(v) (ll)(v).size()
//#define rep(i,n) for(ll i=a;i<(ll)(n);++i)
#define rep(i,a,n) for(ll i=a;i<(ll)(n);++i)
/*
#define rep(i,...) for(auto i:range(__VA_ARGS__))
inline vector<ll> range(ll n){if(n<=0)return vector<ll>();vector<ll>v(n);iota(all(v),0LL);return v;}
inline vector<ll> range(ll a,ll b){if(b<=a)return vector<ll>();vector<ll>v(b-a);iota(all(v),a);return v;}
*/
/**
*
* @brief 多項式乗算
*
*
* mul<double>:
* verifed with :https://atcoder.jp/contests/atc001/tasks/fft_c
* submittion :
* mul<complex<double>> :
* mul<modint<1000000007>> :
*
*/
using D=double;
const D PI=acos(D(-1));
using Pc=complex<D>;
void fft(bool type,V<Pc>& a){
int n=a.size(),s=0;
while((1<<s)<n)s++;
assert((1<<s)==n);
static V<Pc>ep[30];
if(!ep[s].size()){
rep(i,0,n){
ep[s].push_back(polar<D>(1,i*2*PI/n));
}
}
V<Pc>b(n);
rep(i,1,s+1){
int w=1<<(s-i);
for(int y=0;y<n/2;y+=w){
Pc now=ep[s][y];
if(type)now=conj(now);
rep(x,0,w){
auto l=a[y<<1|x];
auto u=now,v=a[y<<1|x|w];
// auto r=Pc(
// u.real()*v.real()-u.imag()*v.imag(),
// u.real()*v.imag()+u.imag()*v.real()
// );
auto r=u*v;
b[y|x]=l+r;
b[y|x|n>>1]=l-r;
}
}
swap(a,b);
}
}
V<D>mul(const V<D>&a,const V<D>&b){
int s=a.size(),t=b.size(),lg=0;
if(!s||!t)return {};
while((1<<lg)<s+t-1)lg++;
int n=1<<lg;
V<Pc>c(n);
rep(i,0,s)c[i].real(a[i]);
rep(i,0,t)c[i].imag(b[i]);
fft(false,c);
rep(i,0,n/2+1){
const int j=i?n-i:0;
c[i]=(c[i]+conj(c[j]))*(c[i]-conj(c[j]))*Pc(0,-.25l);
if(i!=j)c[j]=conj(c[i]);
}
fft(true,c);
V<D>d(s+t-1);
rep(i,0,s+t-1){
d[i]=c[i].real()/D(n);
}
return d;
}
int main(){
lint n;
cin>>n;
vector<double>a(n+1),b(n+1);
rep(i,0,n)cin>>a[i+1]>>b[i+1];
auto c=mul(a,b);
rep(i,1,2*n+1){
cout<<(int)round(c[i])<<endl;
}
}
Submission Info
| Submission Time |
|
| Task |
C - 高速フーリエ変換 |
| User |
hotman78 |
| Language |
C++ (GCC 9.2.1) |
| Score |
100 |
| Code Size |
2474 Byte |
| Status |
AC |
| Exec Time |
347 ms |
| Memory |
17664 KiB |
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 |
6 ms |
3968 KiB |
| 01_00_01 |
AC |
2 ms |
4080 KiB |
| 01_01_19 |
AC |
2 ms |
3996 KiB |
| 01_02_31 |
AC |
2 ms |
3900 KiB |
| 01_03_22 |
AC |
2 ms |
3928 KiB |
| 01_04_31 |
AC |
2 ms |
4028 KiB |
| 01_05_40 |
AC |
3 ms |
3924 KiB |
| 01_06_15 |
AC |
2 ms |
3816 KiB |
| 01_07_39 |
AC |
2 ms |
3936 KiB |
| 01_08_28 |
AC |
2 ms |
4032 KiB |
| 01_09_30 |
AC |
3 ms |
4084 KiB |
| 01_10_23 |
AC |
3 ms |
3952 KiB |
| 01_11_33 |
AC |
2 ms |
4080 KiB |
| 01_12_11 |
AC |
3 ms |
4076 KiB |
| 01_13_28 |
AC |
2 ms |
4080 KiB |
| 01_14_41 |
AC |
2 ms |
3976 KiB |
| 01_15_26 |
AC |
2 ms |
4004 KiB |
| 01_16_49 |
AC |
2 ms |
3980 KiB |
| 01_17_34 |
AC |
3 ms |
3948 KiB |
| 01_18_02 |
AC |
2 ms |
3924 KiB |
| 01_19_33 |
AC |
2 ms |
4056 KiB |
| 01_20_29 |
AC |
2 ms |
4032 KiB |
| 02_00_51254 |
AC |
188 ms |
10740 KiB |
| 02_01_82431 |
AC |
301 ms |
17452 KiB |
| 02_02_17056 |
AC |
70 ms |
6936 KiB |
| 02_03_34866 |
AC |
136 ms |
10420 KiB |
| 02_04_6779 |
AC |
40 ms |
4744 KiB |
| 02_05_65534 |
AC |
231 ms |
10912 KiB |
| 02_06_65535 |
AC |
228 ms |
10928 KiB |
| 02_07_65536 |
AC |
251 ms |
17200 KiB |
| 02_08_65537 |
AC |
246 ms |
17164 KiB |
| 02_09_65538 |
AC |
246 ms |
17192 KiB |
| 02_10_100000 |
AC |
347 ms |
17664 KiB |