Submission #421362


Source Code Expand

#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
#include<cmath>
#include<climits>
#include<string>
#include<set>
#include<map>
using namespace std;
#define rep(i,n) for(int i=0;i<((int)(n));i++)
#define reg(i,a,b) for(int i=((int)(a));i<=((int)(b));i++)
#define irep(i,n) for(int i=((int)(n))-1;i>=0;i--)
#define ireg(i,a,b) for(int i=((int)(b));i>=((int)(a));i--)
typedef long long int lli;
typedef pair<int,int> mp;
#define fir first
#define sec second
#define IINF INT_MAX
#define LINF LLONG_MAX

#include <complex>



typedef complex<double> comp;
typedef vector<comp> poly;
typedef vector<comp> vec;

comp zeta;
vec circ;
int n;

void cout(comp c){
	printf("%lf + %lf i\n",c.real(),c.imag());
}

void init(int p){
	n=1;
	while(n<p)n*=2;
	
	double pi = 3.1415926535;
	zeta = comp(cos(pi*2.0/n),sin(pi*2.0/n));
	//cout(zeta);
	circ.push_back(comp(1,0));
	rep(i,n){
		circ.push_back(circ[i]*zeta);
	}
}

void invinit(){
	
	double pi = 3.1415926535;
	zeta = comp(cos(pi*2.0/n),-sin(pi*2.0/n));
	//cout(zeta);
	circ.clear();
	circ.push_back(comp(1,0));
	rep(i,n){
		circ.push_back(circ[i]*zeta);
	}
}

void vout(vec v){
	printf("vout %d\n",v.size());
	rep(i,v.size()){
		cout(v[i]);
	}
}



vec dft(poly po,int b){ //poから高速フーリエ変換したのを返す
	//po(0)からpo(n-1)までのb個を、n/b間隔で求める
	//printf("fft\n");
	//printf("%d %d\n",po.size(),b);
	vec res;
	if(b==1){
		res.push_back(po[0]);
	}
	else{
		poly p1,p2;
		rep(i,po.size()/2){
			p1.push_back(po[i*2]);
			p2.push_back(po[i*2+1]);
		}
		vec v1 = dft(p1,b/2),
			v2 = dft(p2,b/2);
		
		comp z = 1;
		//cout(z);
		rep(i,b){
			res.push_back(v1[i%(b/2)]+z*v2[i%(b/2)]);
			z*=circ[n/b];
		}
	}
	
	/*
	printf("%d\n",b);
	rep(i,b){
		cout(res[i]);
	}*/
	
	return res;
}



vec solve(poly p1,poly p2){
	vec p1v = dft(p1,n);
	//vout(p1v);
	vec p2v = dft(p2,n);
	//vout(p2v);
	
	invinit();
	
	poly fp;
	rep(i,n){
		fp.push_back(p1v[i]*p2v[i]);
	}
	
	vec res = dft(fp,n);
	return res;
}

int main(void){
	/*
	init(4);
	poly p;
	vec v = dft(p,n);
	
	
	rep(i,n){
		printf("%lf + %lf i\n",v[i].real(),v[i].imag());
	}*/
	
	int in;
	poly p1,p2;
	
	scanf("%d",&in);
	rep(i,in){
		double a,b;
		scanf("%lf%lf",&a,&b);
		p1.push_back(comp(a,0));
		p2.push_back(comp(b,0));
	}
	
	
	init(in*2);
	
	rep(i,n-in){
		p1.push_back(comp(0,0));
		p2.push_back(comp(0,0));
	}
	
	vec ans = solve(p1,p2);
	
	//vout(ans);
	
	printf("0\n");
	rep(i,in*2-1){
		
		printf("%lld\n",((lli)((ans[i].real()+0.00001)/n)));
	}
	
	return 0;
}








Submission Info

Submission Time
Task C - 高速フーリエ変換
User satos
Language C++ (GCC 4.9.2)
Score 0
Code Size 2724 Byte
Status WA
Exec Time 1554 ms
Memory 55736 KB

Compile Error

./Main.cpp: In function ‘void vout(vec)’:
./Main.cpp:65:29: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘std::vector<std::complex<double> >::size_type {aka long unsigned int}’ [-Wformat=]
  printf("vout %d\n",v.size());
                             ^
./Main.cpp: In function ‘int main()’:
./Main.cpp:140:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&in);
                 ^
./Main.cpp:143:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lf%lf",&a,&b);
                        ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
AC × 1
AC × 6
WA × 27
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 39 ms 800 KB
01_00_01 AC 33 ms 856 KB
01_01_19 WA 28 ms 924 KB
01_02_31 WA 29 ms 856 KB
01_03_22 WA 27 ms 800 KB
01_04_31 WA 27 ms 920 KB
01_05_40 WA 28 ms 808 KB
01_06_15 WA 27 ms 860 KB
01_07_39 WA 27 ms 864 KB
01_08_28 WA 27 ms 868 KB
01_09_30 WA 27 ms 920 KB
01_10_23 WA 27 ms 864 KB
01_11_33 WA 28 ms 860 KB
01_12_11 WA 28 ms 868 KB
01_13_28 WA 28 ms 864 KB
01_14_41 WA 26 ms 860 KB
01_15_26 WA 28 ms 864 KB
01_16_49 WA 28 ms 916 KB
01_17_34 WA 29 ms 856 KB
01_18_02 AC 28 ms 860 KB
01_19_33 WA 28 ms 920 KB
01_20_29 WA 27 ms 868 KB
02_00_51254 WA 774 ms 28724 KB
02_01_82431 WA 1518 ms 55728 KB
02_02_17056 WA 375 ms 15040 KB
02_03_34866 WA 749 ms 28852 KB
02_04_6779 WA 109 ms 4172 KB
02_05_65534 AC 797 ms 28852 KB
02_06_65535 AC 789 ms 28732 KB
02_07_65536 AC 793 ms 28732 KB
02_08_65537 WA 1491 ms 55728 KB
02_09_65538 WA 1498 ms 55608 KB
02_10_100000 WA 1554 ms 55736 KB