ECF R9(632E) FFT
Description:
上一篇blog.
Solution:
同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了.
同样有许多需要注意的地方:我们只是判断可行性,所以为了保证精度如果f大于1就把它变成1; 对于长度也可以慢慢倍增,可以优化复杂度就是写起来麻烦.
void change(complex y[],int len)
{int i,j,k;for(i = 1, j = len/2;i < len-1; i++){if(i < j)swap(y[i],y[j]);k = len/2;while( j >= k){j -= k;k /= 2;}if(j < k) j += k;}
}
void fft(complex y[],int len,int on)
{change(y,len);for(int h = 2; h <= len; h <<= 1){complex wn(cos(-on*2*PI/h),sin(-on*2*PI/h));for(int j = 0;j < len;j+=h){complex w(1,0);for(int k = j;k < j+h/2;k++){complex u = y[k];complex t = w*y[k+h/2];y[k] = u+t;y[k+h/2] = u-t;w = w*wn;}}}if(on == -1)for(int i = 0;i < len;i++)y[i].r /= len;
}
const int maxn = 2e6+5;
complex x1[maxn], x2[maxn];
int a[maxn], b[maxn];
void cal(int *a, int *b, int &lena, int &lenb) {int len = 1;while(len<lena+lenb)len<<=1;for(int i = 0; i<=lenb; i++) {x1[i] = complex(b[i], 0);}for(int i = lenb+1; i<len; i++)x1[i] = complex(0, 0);for(int i = 0; i<=lena; i++) {x2[i] = complex(a[i], 0);}for(int i = lena+1; i<len; i++)x2[i] = complex(0, 0);fft(x1, len, 1);fft(x2, len, 1);for(int i = 0; i<len; i++)x1[i] = x1[i]*x2[i];fft(x1, len, -1);for(int i = 0; i<=lena+lenb; i++)b[i] = (int)(x1[i].r+0.5);for(int i = 0; i<=lena+lenb; i++)if(b[i]>0)b[i] = 1;lenb += lena;
}
int main()
{int n, k, x;cin>>n>>k;for(int i = 0; i<n; i++) {scanf("%d", &x);a[x]++;}b[0] = 1;int lena = 1000, lenb = 0;while(k) {if(k&1) {cal(a, b, lena, lenb);}if(k>1) {cal(a, a, lena, lena);}k>>=1;}for(int i = 0; i<=lena+lenb; i++) {if(b[i]) {printf("%d ", i);}}cout<<endl;return 0;
}
转载于:https://www.cnblogs.com/YCuangWhen/p/5407601.html
ECF R9(632E) FFT相关推荐
- CodeForces 632E Thief in a Shop(FFT)
题意:n种物品每种物品有无限个,每个物品有一个价格,现在问选取k个的所以可能总价. 思路:FFT.如果只选择两件商品的话,很容易想到FFT,对于其他的k,只要类似快速幂来求即可,这样做时间复杂度为O( ...
- (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...
- BZOJ.3527.[ZJOI2014]力(FFT)
题目链接 \(Descripiton\) 给出\(q[\ ]\),\[F[j]=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_ ...
- C语言实现傅里叶变换函数dft,idft,fft,ifft
自定义结构体complex(复数) typedef struct{double re; //实部 double im; //虚部 }complex; 用于为离散序列倒码排序的函数 int revers ...
- HDU1402(FFT入门)
题目链接:http://acm.hdu.edu.cn/status.php?user=Reykjavik11207&pid=1402&status=5 本题数据范围为5e4,常规方法O ...
- 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...
如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...
- python fft库有哪些_Python图像处理库PIL中快速傅里叶变换FFT的实现(一)
离散傅里叶变换(discrete Fouriertransform)傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规 ...
- 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)
传送门 首先,两个数同时增加自然数值相当于只有其中一个数增加(此增加量可以小于0) 我们令$x$为当前的增加量,${a},{b}$分别为旋转后的两个数列,那么$$ans=\sum_{i=1}^n(a_ ...
- 51nod1565 FFT
思路: 显然拆位FFT 不解释 //By SiriusRen #include <bits/stdc++.h> using namespace std; const int N=55000 ...
最新文章
- 数学图形之克莱因瓶(klein bottle)
- leetcode 697 Degree of an Array
- qt初学者 第一个小程序 小界面
- java环境变量的配置_Java的下载及环境变量的配置
- oracle sysauth,sysauth$基表的用户权限的一点分析
- PP视频怎么设置退出程序时清空本地播放记录
- Chrome 73 DevTools 新功能之 Logpoints
- Make my home's PC as proxy server to surf internet
- 超键、候选键、主键、外键区别?
- C#中执行Dos命令
- Java中JSON的解析方式
- 高德地图加载白屏问题No implementation found for long com.autonavi.amap.mapcore.MapCore.nativeNew
- 基于阿里云的系统灾备方法架构与安全应急预案介绍
- win10下虚拟机VMware安装PhoenixOS(凤凰OS)
- 缩放指数型线性单元(SELU)
- windows之IP地址(一)
- 也谈特征值和特征向量的几何意义
- 如何正确理解维度灾难
- 中国空气能热水器市场品牌竞争格局与投资价值分析报告2022版
- ciObjectFactory::create_new_metadata