题目链接

题意:

给定一个长度为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. 未来软件是什么样呢?数据库篇(转载)
  2. 帧布局(FrameLayout)及属性
  3. 如何查询编程语言或者网站里一些特殊符号的unicode编码
  4. 不懂数据库索引原理?因为你心里没有一点B树
  5. 正则表达式收集(持久更新)
  6. 什么是MongoDB
  7. WinEdt LaTeX参考文献的交叉引用
  8. 计算机多余自动启动项,去掉多余的开机启动项
  9. Android发短信功能
  10. iOS 适配iPhone XR/XS/XS MAX
  11. JAVA后端应该学什么技术?
  12. 详解CAN总线:什么是CAN总线?
  13. SUN ZFS STORAGE 7320阵列管理
  14. mysql nemesis后缀,YOUR FILES ARE ENCRYPTED
  15. 机器学习(十)——期望值最大算法(EM算法)
  16. 网站降权后应该如何去处理
  17. 无需下载软件pdf转jpg格式
  18. c语言中单词的作用与形式,C语言基础教程:单词的用法与规则
  19. 中科大ctf题型总结,来自小白的感慨
  20. 关系数据理论--规范化

热门文章

  1. 易语言精易web浏览器填表
  2. 易语言html5内核,精易Web浏览器支持库易语言版
  3. HDMI音视频传输协议
  4. 嵌入式开发日记(6)——对串口数据读取的优化以及处理程序的改写
  5. 快速开发大热风潮之下 这免费的羊毛不来薅薅?
  6. 2021年4月12日 关于VRRP!!!
  7. 最优二叉查找树,动态规划法,二维表,填表优化,代码
  8. Linux文字游戏制作软件,小精灵美化app
  9. c语言用if分解三位数,c语言if语句练习题.doc
  10. Axure RP 8制作计时器