BZOJ 2194 快速傅立叶之二

本文详细介绍快速傅里叶变换(FFT)算法的原理及其实现过程,通过具体实例展示了如何利用FFT解决复杂的数学问题。文章包括FFT算法的C++实现代码,并提供了完整的输入输出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。

Input

第一行一个整数N,接下来N行,第i+2..i+N-1行,每行两个数,依次表示a[i],b[i] (0 < = i < N)。

Output

输出N行,每行一个整数,第i行输出C[i-1]。

Sample Input

5
3 1
2 4
1 1
2 4
1 4

Sample Output

24
12
10
6
1

HINT

Source

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FFT~

和上一道并没有什么差别……

注意a和b不能用int输入,要用读入优化~


#include<cstdio>
#include<complex>
#include<cmath>
using namespace std;
#define pi acos(-1)
#define E complex<double>

int n,m,l,r[262144];
E a[262144],b[262144];

int read()
{
	int totnum=0,f=1;char s=getchar();
	while(s<'0' || s>'9') {if(s=='-') f=-1;s=getchar();}
	while(s>='0' && s<='9') {totnum=totnum*10+s-'0';s=getchar();}
	return totnum*f;
}

void fft(E *u,int v)
{
	for(int i=0;i<n;i++) if(i<r[i]) swap(u[i],u[r[i]]);
	for(int i=1;i<n;i<<=1)
	{
		E wn(cos(pi/i),v*sin(pi/i));
		for(int j=0;j<n;j+=(i<<1))
		{
			E w(1,0);
			for(int k=0;k<i;k++,w*=wn)
			{
				E x=u[j+k],y=w*u[i+j+k];
				u[j+k]=x+y;u[i+j+k]=x-y;
			}
		}
	}
	if(v==-1) for(int i=0;i<n;i++) u[i]/=n; 
}

int main()
{
	scanf("%d",&n);n--;m=2*n;
	for(int i=0;i<=n;i++) a[i]=read(),b[n-i]=read();
	for(n=1;n<=m;n<<=1) l++;
	for(int i=0;i<n;i++) r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
	fft(a,1);fft(b,1);
	for(int i=0;i<=n;i++) a[i]*=b[i];
	fft(a,-1);
	for(int i=m/2;i<=m;i++) printf("%d\n",(int)(a[i].real()+0.1));
	return 0;
}


基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值