Submission #420587


Source Code Expand

#include <iostream>
#include <complex>
#include <vector>
#include <algorithm>
using namespace std;
typedef complex<long double> CMP;

static const long double PI = atan((long double)1)*4;
CMP tmp[65536*4];

template<int F>
void fft_impl( CMP a[], int n, int stride = 1 )
{
	if( n > 1 )
	{
		CMP *ev=a, *od=a+stride;
		int s2=stride*2, n2=n/2;

		fft_impl<F>( ev, n2, s2 );
		fft_impl<F>( od, n2, s2 );

		for(int i=0; i<n; ++i) tmp[i] = ev[s2*(i%n2)] + od[s2*(i%n2)]*polar((long double)1.0, F*2*PI*i/n);
		for(int i=0; i<n; ++i) a[stride*i] = tmp[i];
	}
}

void fft( vector<CMP>& a )
{
	fft_impl<+1>(&a[0], a.size());
}

void ifft( vector<CMP>& a )
{
	fft_impl<-1>(&a[0], a.size());
	for(int i=0; i<a.size(); ++i)
		a[i] /= a.size();
}

int main()
{
	int N; cin>>N;
	int Z=1; while(Z<1+2*N) Z*=2;

	vector<CMP> A(Z), B(Z), C(Z);
	for(int i=1; i<=N; ++i) {
		double a, b; cin>>a>>b;
		A[i] = a;
		B[i] = b;
	}

	fft(A);
	fft(B);
	for(int i=0; i<Z; ++i)
		C[i] = A[i]*B[i];
	ifft(C);
	for(int k=1; k<=2*N; ++k)
		cout << int(round(abs(C[k]))) << endl;
}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User cafelier
Language C++11 (GCC 4.9.2)
Score 100
Code Size 1110 Byte
Status AC
Exec Time 3154 ms
Memory 33592 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 48 ms 8932 KB
01_00_01 AC 41 ms 8988 KB
01_01_19 AC 44 ms 8988 KB
01_02_31 AC 45 ms 8996 KB
01_03_22 AC 44 ms 8992 KB
01_04_31 AC 42 ms 8996 KB
01_05_40 AC 48 ms 8992 KB
01_06_15 AC 45 ms 8948 KB
01_07_39 AC 45 ms 9004 KB
01_08_28 AC 48 ms 9004 KB
01_09_30 AC 45 ms 8964 KB
01_10_23 AC 44 ms 9004 KB
01_11_33 AC 41 ms 8924 KB
01_12_11 AC 45 ms 8924 KB
01_13_28 AC 43 ms 8988 KB
01_14_41 AC 62 ms 8964 KB
01_15_26 AC 48 ms 8920 KB
01_16_49 AC 43 ms 8996 KB
01_17_34 AC 44 ms 8988 KB
01_18_02 AC 46 ms 8972 KB
01_19_33 AC 44 ms 8992 KB
01_20_29 AC 43 ms 8984 KB
02_00_51254 AC 1462 ms 21216 KB
02_01_82431 AC 2910 ms 33572 KB
02_02_17056 AC 635 ms 15136 KB
02_03_34866 AC 1409 ms 21276 KB
02_04_6779 AC 195 ms 10528 KB
02_05_65534 AC 1518 ms 21212 KB
02_06_65535 AC 1534 ms 21276 KB
02_07_65536 AC 2886 ms 33560 KB
02_08_65537 AC 2930 ms 33572 KB
02_09_65538 AC 2965 ms 33592 KB
02_10_100000 AC 3154 ms 33572 KB