题目传送门

分析:

FFT一手统计两根棍子相加的方案

然后一个值2S可能会被同一根S自己乘自己得到

然后要减去

其次,A+B和B+A会被算成两种方案,所以还要除以2

然后不太好算合法的方案数,但是非法的很好算

直接减去小于S的所有方案数乘以长度为S的棍子数就好了。。

疯狂卡常2333

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm> #define maxn 500005 using namespace std; inline int getint()
{
int num=,flag=;char c;
while((c=getchar())<''||c>'')if(c=='-')flag=-;
while(c>=''&&c<='')num=num*+c-,c=getchar();
return num*flag;
} struct cp{
double a,b;
cp(){}
cp(double x,double y){a=x,b=y;}
friend cp operator +(cp x,cp y)
{return cp(x.a+y.a,x.b+y.b);}
friend cp operator -(cp x,cp y)
{return cp(x.a-y.a,x.b-y.b);}
friend cp operator *(cp x,cp y)
{return cp(x.a*y.a-x.b*y.b,x.a*y.b+x.b*y.a);}
}; const double pi=acos(-1.0);
int k=,bit;
cp a[maxn],b[maxn];
int rev[maxn];
long long num1[maxn],num2[maxn]; inline void fft(cp *a,int inv)
{
for(int i=;i<k;i++)if(i<rev[i])swap(a[i],a[rev[i]]);
for(int mid=;mid<k;mid<<=)
{
cp tmp(cos(pi/mid),inv*sin(pi/mid));
for(int i=;i<k;i+=mid*)
{
cp ret(,);
for(int j=;j<mid;j++,ret=ret*tmp)
{
cp x=a[i+j],y=ret*a[i+j+mid];
a[i+j]=x+y,a[i+j+mid]=x-y;
}
}
}
} int main()
{
int T=getint();
while(T--)
{
memset(a,,sizeof a);
int mx=;
long long n=getint();k=,bit=;
for(int i=;i<n;i++)
{
int x=getint();mx=max(mx,x);
a[x].a++;
}
while(k<(mx+)*-)k<<=;
while((<<bit)<k)bit++;
for(int i=;i<k;i++)rev[i]=(rev[i>>]>>)|((i&)<<(bit-));
for(int i=;i<k;i++)b[i]=a[i];
fft(a,);
for(int i=;i<k;i++)a[i]=a[i]*a[i];
fft(a,-);
for(int i=;i<k;i++)
{
num1[i]=(long long)(b[i].a+0.5),
num2[i]=(long long)(a[i].a/k+0.5);
if(!(i&))num2[i]-=num1[i>>];
num2[i]>>=;
}
long long ans=(1ll*n*(n-)*(n-))/;
for(int i=;i<=mx;i++)num2[i]+=num2[i-],ans-=num2[i]*num1[i];
printf("%.7lf\n",1.0*ans*/(n*(n-)*(n-)));
}
}

最新文章

  1. volatile修饰符
  2. Graphic32中TBitmap32.TextOut性能分析[转载]
  3. Lucene实战构建索引
  4. C++11 std::copy
  5. QTP10.0安装说明
  6. Java笔记(二)&hellip;&hellip;Hello world!
  7. html不常见问题汇总
  8. C# yield return 和 yield break
  9. Centos7 系统下搭建.NET Core2.0+Nginx+Supervisor+Mysql环境
  10. 原生js简单轮播图 代码
  11. nuxt.js实战之用vue-i18n实现多语言
  12. 利用itext生成pdf的简单例子
  13. mysql 筛选重复项(单列或者多列同时重复)
  14. RelativeLayout 相对父级元素布局
  15. github多人协同使用。
  16. 1、数据库与excel表格的数据导入导出
  17. 【BZOJ3470】Freda’s Walk 概率与期望
  18. Kafka学习总结
  19. BZOJ 3171 [Tjoi2013]循环格(费用流)
  20. Java基础24-文档注释

热门文章

  1. 【2016常州一中夏令营Day3】
  2. 配置nutch
  3. ES基本语法
  4. 学习Java第八周
  5. kubernetes实战(三十):CentOS 8 二进制 高可用 安装 k8s 1.17.x
  6. VRChat之blender教程
  7. 洛谷$P5038\ [SCOI2012]$奇怪的游戏 二分+网络流
  8. 【一起学源码-微服务】Ribbon 源码二:通过Debug找出Ribbon初始化流程及ILoadBalancer原理分析
  9. 阿里云ECS单节点Kubernetes部署
  10. Don’t Repeat Yourself,Repeat Yourself