题目大意:
假设高斯定理在 m m维空间成立
已知mm维空间所有整点电荷 aj a_j
给出 m m维空间下x,yx,y两点距离公式

以及x点在y点引发的电势公式


降序输出求前100个点的电势

T≤51≤m≤18n≤3∗105 T≤5 1≤m≤18 n≤3*10^5
时限 7s 7s

考试的时候看这道题的时候 感觉这道题根本不可做啊???
部分分很友好啊?除了一个5分的点 其他我都不会。。

看完题解之后整个人都不好了。。
然后我用了一个下午来调试 压常

其实 上面那个式子就是卷积的形式 只不过 这个是m维卷积。。。(做毛线啊
好吧 m维卷积大家都会喜闻乐见的 FWT ?
平常的FWT一般都是每一维大小为2 的情况 当大于2的时候我们可以直接上DFT
然后我们会发现这个循环卷积也不好处理
怎么办呢?

将DFT的式子拆成卷积形式 然后FFT优化卷积之后即可得出
即 Bluestein′sAlgorithm Bluestein’s Algorithm
时间复杂度 O(nlog2n) O(nlog^2n)
注意常数很大 所以不得不不预处理单位根 以及一些黑科技

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
#define ld double
ld Sin[20],Cos[20];
struct com
{ld a,b;com(){}com(ld a,ld b):a(a),b(b){}friend com operator +(com a,com b){return com(a.a+b.a,a.b+b.b);}friend com operator -(com a,com b){return com(a.a-b.a,a.b-b.b);}friend com operator *(com a,com b){return com(a.a*b.a-a.b*b.b,a.b*b.a+a.a*b.b);}friend com operator /(com a,ld b){return com(a.a/b,a.b/b);}friend com operator *(com a,ld b){return com(a.a*b,a.b*b);}};
constld pi=acos(-1);
int rev[2200005];
void FFT(com *a,int n,int fl)
{int Len=1<<n;for(int i=0;i<Len;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<n-1);for(int i=0;i<Len;i++)if(rev[i]>i)swap(a[rev[i]],a[i]);for(int p=0,i=1;i<Len;i*=2,p++){com w=com(Cos[p],fl*Sin[p]);for(int j=0;j<Len;j+=2*i){com w0=com(1,0);for(int k=0;k<i;k++){com x=a[j+k],y=w0*a[i+j+k];a[j+k]=x+y;a[j+k+i]=x-y;w0=w0*w;}}}if(fl==-1)for(int i=0;i<Len;i++)a[i]=a[i]/Len;
}com c[2200005],b[2200005];
int C;
ld SIN[2200005],COS[2200005];
void DFT(com* a,int d,int n,int fl)
{int N=1;for(;(1<<N)<(3*n);N++);int P=C/2/n,Nf=2*n;for(int i=0;i<2*n;i++)b[i]=com(COS[i*1ll*i%Nf*P],fl*SIN[i*1ll*i%Nf*P]);       for(int i=0;i<n;i++)c[n-i]=com(COS[i*1ll*i%Nf*P],-fl*SIN[i*1ll*i%Nf*P])*a[i*d];if(n<=50){for(int i=n;i<2*n;i++){int pos=i-n;pos*=d;a[pos]=com(0,0);for(int j=0;j<=i;j++)a[pos]=a[pos]+b[i-j]*c[j];}}else{for(int i=0;i<N;i++)Cos[i]=cos(pi/(1<<i)),Sin[i]=sin(pi/(1<<i));FFT(b,N,1);FFT(c,N,1);for(int i=0;i<(1<<N);i++)b[i]=b[i]*c[i];FFT(b,N,-1);for(int i=0;i<n;i++)a[i*d]=b[i+n];}for(int i=0;i<n;i++)a[i*d]=a[i*d]*com(COS[i*1ll*i%Nf*P],-fl*SIN[i*1ll*i%Nf*P]);if(fl==-1)for(int i=0;i<n;i++)a[i*d]=a[i*d]/n;for(int i=0;i<(1<<N);i++)b[i]=c[i]=com(0,0);
}
int s[2200005];
void FWT(com* a,int n,int m,int fl)
{int len=1;for(int i=0;i<m;len*=s[i++])for(int j=0;j<n;j+=len*s[i])for(int k=0;k<len;k++)DFT(a+j+k,len,s[i],fl);
}
com Da[2200005];
int no[2200005];
bool cmp(int a,int b)
{return Da[a].a>Da[b].a;
}
int main()
{freopen("anarchy.in","r",stdin);freopen("anarchy.out","w",stdout);int T;scanf("%d",&T);while(T--){int m,n=1;scanf("%d",&m);for(int i=0;i<m;i++)scanf("%d",s+i),n*=s[i];C=n;for(int i=0;i<n;i++){int t;scanf("%d",&t);Da[i].a=t;Da[i].b=1;for(int t=i,j=0;j<m;t/=s[j++])Da[i].b*=t%s[j]+1;Da[i].b=powl(Da[i].b,2.0/m); Da[i].b/=2.*m;Da[i]=com(Da[i].a+Da[i].b,Da[i].a-Da[i].b); }C*=2;for(int i=0;i<2*n;i++)SIN[i]=sin(2*pi/2/n*i),COS[i]=cos(2*i*pi/2/n);FWT(Da,n,m,1);for(int i=0;i<n;i++)Da[i]=Da[i]*Da[i];FWT(Da,n,m,-1);for(int i=0;i<n;i++)no[i]=i;sort(no,no+n,cmp);for(int i=0;i<min(n,100);i++)printf("%.9f ",Da[no[i]].a/4);puts("");}return 0;
}

Anarchy的解题报告相关推荐

  1. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  2. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  3. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  4. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  5. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 解题报告(五)组合计数(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. Nature Biotechnology封面 | 经济快速:纳米孔宏基因组方案, 6小时准确识别下呼吸道病原体...
  2. linux关机 hibernate,Linux关机命令
  3. 前端面试——初(H)入(T)江(M)湖(L)
  4. oracle引用vs,VS2013中使用oracle,有关引用哪个.dll
  5. 修改小程序swiper 点的样式_高质量的微信小程序样式模板应该长什么样?
  6. 《英雄联盟:双城之战》全球首映 沉浸式观影打造追剧新潮流
  7. POJ 1821 Fence(单调队列优化DP)
  8. 封装Python列表实现多下标访问
  9. Exchange 2010升级补丁时的服务状态变化
  10. 一文快速了解 Java 9 - 16 新特性,网友:卷不动了?
  11. 详解SpringBoot整合ace-cache缓存
  12. 一步一步学会JDBC
  13. TLSF算法1:二级索引的计算
  14. QT移植腾讯云C-SDK结合实现OTA更新
  15. python MDI窗口加载ui文件方法
  16. phpmywind 调取导航
  17. 如何系统自学软件测试,看这篇软件测试学习方法万字总结就够了
  18. 超好玩的模拟游戏:美国卡车模拟Mac中文版
  19. linux bios设置界面,BIOS怎么设置 史上最详细的bios设置图解教程
  20. Alex Woodie:2019大数据预测

热门文章

  1. Spring源码分析系列-Bean的生命周期(总结篇)
  2. 通过chroot运行linux,通过chroot构建Linux操作系统
  3. 唐朝边戍 NFT 作品集 2.0 上线市场平台,体验中国古代文化的魅力
  4. 刺客信条-【设计模式】-软件设计准则
  5. 什么是事件冒泡,它是如何工作的?如何阻止事件冒泡?
  6. 最长公共子序列算法 java,算法学习——java实现最长公共子序列,
  7. iOS开发-简历中需要特别注意的 3 个点
  8. 离别之痛(伟大的爸爸妈妈)
  9. django社交类程序笔记(14)社交模块模型创建
  10. 树莓派新手通过NOOBS一键安装系统