为什么 cout 输出浮点数和整数效率差距如此大?
查看原帖
为什么 cout 输出浮点数和整数效率差距如此大?
563958
dxrS楼主2024/3/19 21:27
#include<bits/stdc++.h>
using namespace std;
const int N=4e6+5;
const double PI=acos(-1);
int n,m,up;
complex<double> a[N],b[N];
inline void solve(const int n,complex<double> *a,const int op){
	if(n==1) return;
	int mid=(n>>1);
	complex<double> a0[mid],a1[mid];
	for(int i=0;i<mid;++i) a0[i]=a[i<<1],a1[i]=a[i<<1|1];
	solve(mid,a0,op),solve(mid,a1,op);
	for(int i=0;i<mid;++i){
		complex<double> e(cos(op*i*2*PI/n),sin(op*i*2*PI/n));
		a[i]=a0[i]+e*a1[i];
		a[i+mid]=a0[i]-e*a1[i];
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m,++n,++m;
	for(int i=0,x;i<n;++i) cin>>x,a[i].real(x);
	for(int i=0,x;i<m;++i) cin>>x,b[i].real(x);
	up=1;
	while(up<n+m-1) up<<=1;
	solve(up,a,1),solve(up,b,1);
	for(int i=0;i<up;++i) a[i]*=b[i];
	solve(up,a,-1);
	for(int i=0;i<n+m-1;++i) cout<<int((a[i].real()+0.5+1e-6)/up)<<' ';//AC
	cout<<endl;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=4e6+5;
const double PI=acos(-1);
int n,m,up;
complex<double> a[N],b[N];
inline void solve(const int n,complex<double> *a,const int op){
	if(n==1) return;
	int mid=(n>>1);
	complex<double> a0[mid],a1[mid];
	for(int i=0;i<mid;++i) a0[i]=a[i<<1],a1[i]=a[i<<1|1];
	solve(mid,a0,op),solve(mid,a1,op);
	for(int i=0;i<mid;++i){
		complex<double> e(cos(op*i*2*PI/n),sin(op*i*2*PI/n));
		a[i]=a0[i]+e*a1[i];
		a[i+mid]=a0[i]-e*a1[i];
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m,++n,++m;
	for(int i=0,x;i<n;++i) cin>>x,a[i].real(x);
	for(int i=0,x;i<m;++i) cin>>x,b[i].real(x);
	up=1;
	while(up<n+m-1) up<<=1;
	solve(up,a,1),solve(up,b,1);
	for(int i=0;i<up;++i) a[i]*=b[i];
	solve(up,a,-1);
	for(int i=0;i<n+m-1;++i) cout<<fixed<<setprecision(0)<<fabs(a[i].real())/up<<' ';//TLE
	cout<<endl;
	return 0;
}

只有输出不同。

2024/3/19 21:27
加载中...