题目链接

题意:

给定一个长度为n的数列,选其中p个数相加,要求输出可以得到所有结果和得到方案数。

思路:

不写了。。。贴代码留恋。。。写的难受,一直MLE,还卡精度,这题出现在现场赛里。。有毒

#include<bits/stdc++.h>const long double PI = acos(-1.0);
using namespace std;struct comple{long double r , i;comple(long double rr=0,long double ii=0){r = rr; i = ii;}comple operator + (const comple& a){return comple(r+a.r,i+a.i);}comple operator - (const comple& a){return comple(r-a.r,i-a.i);}comple operator * (const comple& a){return comple(r*a.r-i*a.i , r*a.i+i*a.r);}
};int getLen(int x){int res = 1;while(res<x)res<<=1;return res;
}void brc(comple *a,int l){for(int i=1,j=l/2;i<l-1;i++){if(i<j)swap(a[i],a[j]);int k = l/2;while(j>=k){j-=k;k>>=1;}if(j<k)j+=k;}
}void fft(comple *y,int l,int on){brc(y,l);comple u,t;for(int h=2;h<=l;h<<=1){comple wn( cos(on*2*PI/h),sin(on*2*PI/h) );for(int j=0;j<l;j+=h){comple w(1,0);for(int k=j;k<j+h/2;k++){u = y[k];t = w*y[k+h/2];y[k] = u+t;y[k+h/2] = u-t;w  = w*wn;}}}if(on<0){for(int i=0;i<l;i++){y[i].r/=l;}}
}const int MAXL = (1<<16);
int n;
int A[13005];
comple F[12][MAXL];
long long tmp[12][MAXL];void dfs(int now , int need ,const int& l){if(now>need)return ;if(now==1){for(int i=0;i<13001;i++){F[10][i<<2].r = F[1][i<<1].r = F[4][i*3].r = F[0][i].r = tmp[10][i<<2] = tmp[1][i<<1] = tmp[4][i*3] = tmp[0][i] = A[i];tmp[11][i*5]=A[i];if(now==need){if(tmp[0][i])printf("%d: %I64d\n",i,tmp[0][i]);}}return dfs(now+1,need,l);}if(now==2){fft(F[0],l,1);for(int i=0;i<l;i++){F[2][i] = F[0][i] * F[0][i];}fft(F[2],l,-1);for(int i=0;i<l;i++){tmp[2][i] = (long long)(F[2][i].r+0.5);F[2][i].i = 0;tmp[2][i] = (tmp[2][i]+tmp[1][i])/2;F[2][i].r = tmp[2][i];if(now==need){long long ans = tmp[2][i] - tmp[1][i];if(ans)printf("%d: %I64d\n",i,ans);}}return dfs(now+1,need,l);}if(now==3){fft(F[2],l,1);fft(F[1],l,1);for(int i=0;i<l;i++){F[5][i] = F[0][i] * F[2][i];F[3][i] = F[0][i] * F[1][i];}fft(F[3],l,-1);fft(F[5],l,-1);for(int i=0;i<l;i++){F[3][i].i = F[5][i].i = 0;tmp[3][i] = (long long)(F[3][i].r+0.5);F[3][i].r = tmp[3][i];tmp[5][i] = (long long)(F[5][i].r+0.5);tmp[5][i] = ( tmp[5][i] + tmp[3][i]  + tmp[4][i] ) / 3;F[5][i].r = tmp[5][i];if(now==need){long long ans = (tmp[5][i] - tmp[3][i]);if(ans)printf("%d: %I64d\n",i,ans);}}return dfs(now+1,need,l);}if(now==4){fft(F[4],l,1);fft(F[5],l,1);fft(F[10],l,1);for(int i=0;i<l;i++){F[6][i] = F[5][i] * F[0][i];F[7][i] = F[1][i] * F[2][i];F[8][i] = F[1][i] * F[1][i];F[9][i] = F[4][i] * F[0][i];}fft(F[6],l,-1);fft(F[7],l,-1);fft(F[8],l,-1);fft(F[9],l,-1);for(int i=0;i<l;i++){F[6][i].i = F[7][i].i = F[8][i].i = F[9][i].i = 0;tmp[6][i] = (long long)(F[6][i].r+0.5);tmp[7][i] = (long long)(F[7][i].r+0.5);tmp[8][i] = (long long)(F[8][i].r+0.5);tmp[8][i] = (tmp[8][i]+tmp[10][i])/2;tmp[9][i] = (long long)(F[9][i].r+0.5);tmp[6][i] = (tmp[6][i]+tmp[7][i]+tmp[9][i]+tmp[10][i])/4;if(now==need){long long ans = (  tmp[6][i] - tmp[7][i]   + tmp[8][i] - tmp[10][i] );if(ans)printf("%d: %I64d\n",i,ans);}F[6][i].i = 0;F[6][i].r = tmp[6][i];F[8][i].r = tmp[8][i];}return dfs(now+1,need,l);}if(now==5){fft(F[6],l,1);fft(F[8],l,1);for(int i=0;i<l;i++){F[6][i] = F[6][i] * F[0][i];F[7][i] = F[1][i] * F[5][i];F[9][i] = F[0][i] * F[8][i];F[8][i] = F[4][i] * F[2][i];F[3][i] = F[10][i] * F[0][i];}fft(F[7],l,-1);fft(F[8],l,-1);fft(F[9],l,-1);fft(F[6],l,-1);fft(F[3],l,-1);for(int i=0;i<l;i++){tmp[6][i] = (long long)(F[6][i].r+0.5);tmp[7][i] = (long long)(F[7][i].r+0.5);tmp[8][i] = (long long)(F[8][i].r+0.5);tmp[9][i] = (long long)(F[9][i].r+0.5);tmp[3][i] = (long long)(F[3][i].r+0.5);long long cnt = (tmp[6][i]+tmp[7][i]+tmp[8][i]+tmp[3][i]+tmp[11][i]);tmp[6][i] = cnt/5;if(now==need){long long ans = tmp[6][i] - tmp[7][i] + tmp[9][i]-tmp[3][i];if(ans)printf("%d: %I64d\n",i,ans);}}return dfs(now+1,need,l);}
}int main(){int T,k,t=0;scanf("%d",&T);while(T--){printf("Case #%d:\n",++t);scanf("%d%d",&n,&k);memset(A,0,sizeof(A));memset(tmp,0,sizeof(tmp));memset(F,0,sizeof(F));int l = 0;for(int i=0,x;i<n;i++){scanf("%d",&x);l = max(l,x);A[x]++;}l = l * k ;l = getLen(l);dfs(1,k,l);printf("\n");}return 0;
}

解题报告:HDU_4093 Xavier is Learning to Count FFT相关推荐

  1. BZOJ2498 : Xavier is Learning to Count

    考虑容斥,通过$Bell(p)$的时间枚举所有等价情况. 对于一种情况,强制了一个等价类里面的数都要相同,其它的可以相同也可以不同. 这方案数显然可以通过多项式乘法求得,乘上容斥系数$(-1)^{p- ...

  2. 【LeetCode】222. Count Complete Tree Nodes 解题报告(Python)

    [LeetCode]222. Count Complete Tree Nodes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个 ...

  3. HDU7191 Count Set 解题报告

    HDU7191 Count Set 解题报告 题目链接 题目大意 n n n 个数构成排列 p i ( 1 ≤ i ≤ n ) p_i(1\le i\le n) pi​(1≤i≤n),计算基数为 k ...

  4. LeetCode 解题报告索引

    最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中......                        ...

  5. 百度之星初赛(1)解题报告

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. [解题报告]Codeforces 105D Entertaining Geodetics

    Abstract Codeforces 105D 并查集(官方标的) Body Source http://codeforces.com/problemset/problem/105/D Descri ...

  7. 山东科技大学第二届ACM校赛解题报告

    这次校赛的目的,是为了省赛测试各种程序是否有问题. 热身赛的逗比题有点打击我,感觉正式赛应该不会出这种问题.开始的时候直接上了A题,然后大概是第六,前面好多友情队,正式队排名第二. 然后读了读B题,稍 ...

  8. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点 http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/  ...

  9. 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案

    2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...

  10. 2021字节跳动校招秋招算法面试真题解题报告--leetcode148 排序链表,内含7种语言答案

    148.排序链表 1.题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序 2.解题报告 针对nlogn的排序算法,主要有快速排序,归并排序和堆排序.其中,堆排序利用了数 ...

最新文章

  1. Java并发系列—工具类:CountDownLatch
  2. 管理和配置客户端访问服务器
  3. ViewPager留两边 显示左右两边的视图
  4. 基础知识:IDE集成开发环境(pycharm)、基本数据类型、用户的交互、运算符
  5. Absolute Math (HDU 6868)
  6. 同时运行两个PHP吗,PHP-避免由两个工作人员同时运行后台作业
  7. 行为型模式:解释器模式
  8. javascript:URL编解码和父子窗口交互
  9. bzoj 1046: [HAOI2007]上升序列
  10. centos 部署mysql5.7_centos7部署mysql-5.7
  11. reportlab 应用 打印考生成绩
  12. 小样本学习记录————MAML的改进MAML++
  13. 软件工程_东师站_总结
  14. 2022年全球市场胸腰椎板系统总体规模、主要生产商、主要地区、产品和应用细分研究报告
  15. 教育技术(Educational technology)学习分析和教育数据挖掘领域的SCI、SSCI、CSSCI期刊与会议
  16. 右击我的电脑--管理--计算机管理,在我的电脑上点右键-管理打不开了?
  17. 特斯拉正式推出全自动驾驶Beta版,马斯克表示 “谨慎行事”-1
  18. 2017前端技术预览(未完结,最后更新于1月13日)
  19. 深度学习在文档矫正中的应用
  20. HTTP协议与网络编程(二)HTTP消息

热门文章

  1. linux下编译opencv的无kuda版本,自定义路径
  2. 数字图像处理 - 实验作业一 - Python
  3. 黑鲨重装计算机安装无法继续,黑鲨装机大师常见问题详解
  4. linux飞行模式切换,光遇飞行的两种模式区别 飞行模式切换和区别分析
  5. 计算机连接网络是飞行模式怎么办,电脑网络设置只剩飞行模式怎么办?
  6. 删库跑路 php,程序员删库跑路事件,php中文网的几点声明!
  7. 电脑开机自检怎么取消
  8. JSONP跨域请求原理解析
  9. HTML+CSS静态网页制作:电影网站设计——漫威电影(2页)
  10. 判断中心对称图形C语言