Submission #7586931


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define pb push_back
#define mp make_pair
#define eps 1e-9
#define INF 2000000000
#define LLINF 1000000000000000ll
#define sz(x) ((int)(x).size())
#define fi first
#define sec second
#define all(x) (x).begin(),(x).end()
#define sq(x) ((x)*(x))
#define rep(i,n) for(int (i)=0;(i)<(int)(n);(i)++)
#define repn(i,a,n) for(int (i)=(a);(i)<(int)(n);(i)++)
#define EQ(a,b) (abs((a)-(b))<eps)
#define dmp(x) cerr << __LINE__ << " " << #x << " " << x << endl;
template<class T> void chmin(T& a,const T& b){if(a>b)a=b;}
template<class T> void chmax(T& a,const T& b){if(a<b)a=b;}
template<class T,class U>
ostream& operator << (ostream& os,pair<T,U>& p){
	os << p.fi << ',' << p.sec; return os;
}
template<class T,class U>
istream& operator >> (istream& is,pair<T,U>& p){
	is >> p.fi >> p.sec; return is;
}
template<class T>
ostream& operator << (ostream &os,const vector<T> &vec){
	for(int i=0;i<vec.size();i++){
		os << vec[i];
		if(i+1<vec.size())os << ' ';
	}
	return os;
}
template<class T>
istream& operator >> (istream &is,vector<T>& vec){
	for(int i=0;i<vec.size();i++)is >> vec[i];
	return is;
}
void fastio(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<fixed<<setprecision(12);
}
using Complex = complex<double>;
vector<Complex> dft(vector<Complex> f,int n,int sgn=1){
  if(n==1)return f;
  vector<Complex> f0,f1;
  for(int i=0;i<n/2;i++){
    f0.pb(f[i*2]);
    f1.pb(f[i*2+1]);
  }
  f0 = dft(f0,n/2,sgn);
  f1 = dft(f1,n/2,sgn);
  Complex zeta = polar(1.0,2.0*M_PI/n*sgn);
  Complex pow_zeta = 1;
  for(int i=0;i<n;i++){
    f[i] = f0[i%(n/2)]+pow_zeta*f1[i%(n/2)];
    pow_zeta *= zeta;
  }
  return f;
}
vector<Complex> idft(vector<Complex> f,int n){
  f = dft(f,n,-1);
  for(int i=0;i<f.size();i++){
    f[i] /= n;
  }
  return f;
}
vector<Complex> mult(vector<Complex> A,vector<Complex> B){
  int n = 1;
  while(n<A.size()+B.size()+1)n<<=1;
  A.resize(n,0);
  B.resize(n,0);
  A = dft(A,n);
  B = dft(B,n);
  vector<Complex> C;
  for(int i=0;i<n;i++)C.pb(A[i]*B[i]);
  return idft(C,n);
}
int main(){
	int N;
	cin >> N;
	vector<Complex> A(N+1,0),B(N+1,0);
	for(int i=1;i<=N;i++){
		cin >> A[i] >> B[i];
	}
	vector<Complex> C = mult(A,B);
	for(int i=1;i<=2*N;i++){
		cout << (int)(C[i].real()+0.5) << endl;
	}
	return 0;
}

Submission Info

Submission Time
Task C - 高速フーリエ変換
User okura
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2470 Byte
Status AC
Exec Time 1102 ms
Memory 36140 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 3 ms 512 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 2 ms 256 KB
01_09_30 AC 2 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 2 ms 256 KB
01_14_41 AC 2 ms 256 KB
01_15_26 AC 2 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 2 ms 256 KB
02_00_51254 AC 557 ms 18212 KB
02_01_82431 AC 1038 ms 35616 KB
02_02_17056 AC 235 ms 9008 KB
02_03_34866 AC 479 ms 17696 KB
02_04_6779 AC 68 ms 2552 KB
02_05_65534 AC 596 ms 18628 KB
02_06_65535 AC 966 ms 35120 KB
02_07_65536 AC 963 ms 35120 KB
02_08_65537 AC 959 ms 35120 KB
02_09_65538 AC 967 ms 35120 KB
02_10_100000 AC 1102 ms 36140 KB