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相关推荐

  1. CodeForces 632E Thief in a Shop(FFT)

    题意:n种物品每种物品有无限个,每个物品有一个价格,现在问选取k个的所以可能总价. 思路:FFT.如果只选择两件商品的话,很容易想到FFT,对于其他的k,只要类似快速幂来求即可,这样做时间复杂度为O( ...

  2. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT

    题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...

  3. BZOJ.3527.[ZJOI2014]力(FFT)

    题目链接 \(Descripiton\) 给出\(q[\ ]\),\[F[j]=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_ ...

  4. C语言实现傅里叶变换函数dft,idft,fft,ifft

    自定义结构体complex(复数) typedef struct{double re; //实部 double im; //虚部 }complex; 用于为离散序列倒码排序的函数 int revers ...

  5. HDU1402(FFT入门)

    题目链接:http://acm.hdu.edu.cn/status.php?user=Reykjavik11207&pid=1402&status=5 本题数据范围为5e4,常规方法O ...

  6. 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...

    如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...

  7. python fft库有哪些_Python图像处理库PIL中快速傅里叶变换FFT的实现(一)

    离散傅里叶变换(discrete Fouriertransform)傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规 ...

  8. 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)

    传送门 首先,两个数同时增加自然数值相当于只有其中一个数增加(此增加量可以小于0) 我们令$x$为当前的增加量,${a},{b}$分别为旋转后的两个数列,那么$$ans=\sum_{i=1}^n(a_ ...

  9. 51nod1565 FFT

    思路: 显然拆位FFT 不解释 //By SiriusRen #include <bits/stdc++.h> using namespace std; const int N=55000 ...

最新文章

  1. 数学图形之克莱因瓶(klein bottle)
  2. leetcode 697 Degree of an Array
  3. qt初学者 第一个小程序 小界面
  4. java环境变量的配置_Java的下载及环境变量的配置
  5. oracle sysauth,sysauth$基表的用户权限的一点分析
  6. PP视频怎么设置退出程序时清空本地播放记录
  7. Chrome 73 DevTools 新功能之 Logpoints
  8. Make my home's PC as proxy server to surf internet
  9. 超键、候选键、主键、外键区别?
  10. C#中执行Dos命令
  11. Java中JSON的解析方式
  12. 高德地图加载白屏问题No implementation found for long com.autonavi.amap.mapcore.MapCore.nativeNew
  13. 基于阿里云的系统灾备方法架构与安全应急预案介绍
  14. win10下虚拟机VMware安装PhoenixOS(凤凰OS)
  15. 缩放指数型线性单元(SELU)
  16. windows之IP地址(一)
  17. 也谈特征值和特征向量的几何意义
  18. 如何正确理解维度灾难
  19. 中国空气能热水器市场品牌竞争格局与投资价值分析报告2022版
  20. ciObjectFactory::create_new_metadata

热门文章

  1. 如何修改电脑磁盘盘符
  2. goldengate日常管理命令
  3. 《Natural Language Processing with PyTorch》 Chapter 2: A Quick Tour of Traditional NLP 笔记
  4. 信息学奥赛一本通 1272:【例9.16】分组背包
  5. Android状态栏和导航栏透明和沉浸式模式
  6. 视频号的优势,视频号适合普通人做的类型:国仁楠哥
  7. 写给github新人,如何下载并运行一个Github项目
  8. 《倍增商业成功宝典》全新升级上线!炙夏新品,久等终至!
  9. Ribbon实现Eureka负载均衡
  10. ubuntu下载及安装搜狗拼音输入法