题目传送门

分析:

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-)));
}
}

BZOJ 3513 idiots的更多相关文章

  1. bzoj 3513: [MUTC2013]idiots FFT

    bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b< ...

  2. BZOJ 3513: [MUTC2013]idiots

    3513: [MUTC2013]idiots Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 476  Solved: 162[Submit][Stat ...

  3. bzoj 3513 [MUTC2013]idiots FFT 生成函数

    [MUTC2013]idiots Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 806  Solved: 265[Submit][Status][Di ...

  4. 【刷题】BZOJ 3513 [MUTC2013]idiots

    Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是 ...

  5. bzoj 3513: [MUTC2013]idiots【生成函数+FFT】

    想了好长时间最后发现真是石乐志 第一反应就是两边之和大于第三边,但是这个东西必须要满足三次-- 任意的两边之和合通过生成函数套路+FFT求出来(记得去掉重复选取的),然后这任意两边之和大于任意第三边可 ...

  6. Fast Fourier Transform

    写在前面的.. 感觉自己是应该学点新东西了.. 所以就挖个大坑,去学FFT了.. FFT是个啥? 挖个大坑,以后再补.. 推荐去看黑书<算法导论>,讲的很详细 例题选讲 1.UOJ #34 ...

  7. bzoj千题计划168:bzoj3513: [MUTC2013]idiots

    http://www.lydsy.com/JudgeOnline/problem.php?id=3513 组成三角形的条件:a+b>c 其中,a<c,b<c 若已知 两条线段之和=i ...

  8. 【BZOJ】【2132】圈地计划

    网络流/最小割 Orz Hzwer 这类大概是最小割建模中的经典应用吧…… 黑白染色,然后反转黑色的技巧感觉很巧妙!这个转化太神奇了…… /****************************** ...

  9. 【BZOJ 2132】圈地计划 && 【7.22Test】计划

    两种版本的题面 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土 ...

随机推荐

  1. LuoguP3066 逃跑的BarnRunning Away From…

    LuoguP3066 先吐槽一下,这道题名字好长啊 一个非常明显的思路,利用倍增数组不断向上跳.直到数值大于\(L\),然后直接差分统计答案就好了. 这种ZROI也考过,不多赘述了. 我们来考虑主席树 ...

  2. 2018 CCPC 吉林站 H Lovers

    2018 CCPC 吉林站 H Lovers 传送门:https://www.spoj.com/problems/LIS2/en/ 题意: q次操作 1.将第l~r个数的左边和和右边都加上一个数d, ...

  3. hdp3.1 hive 3.0的使用记录

    近来在做项目中的技术调研,使用最新版的hdp3.1,其中使用spark2.3和hive 3.1. 遇到 一些问题,记录如下: 一,使用spark-sql client driver去访问hive创建的 ...

  4. 在网上找到的一些Java封装的utils类

    这是网址:https://github.com/hanyunpeng0521/utils

  5. Memcahced 缓存过期时间问题

    转载:https://help.aliyun.com/knowledge_detail/38654.html 关于设置缓存数据的过期时间,可以参考以下Memcached官方说明: An expirat ...

  6. $Luogu2512/CH122/AcWing122$糖果传递 模拟

    $Luogu$  $AcWing$ $Description$ 有$n$个小朋友坐成一圈,每人有$a_i$个糖果. 每人只能给左右两人传递糖果. 每人每次传递一个糖果代价为$1$. 求使所有人获得均等 ...

  7. JVM探秘:垃圾收集算法

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 垃圾收集算法 垃圾收集算法主要有标记-清除算法.复制算法.标记-整理算法.分代收集算法 ...

  8. Python 线性回归(Linear Regression) - 到底什么是 regression?

    背景 学习 Linear Regression in Python – Real Python,对 regression 一词比较疑惑. 这个 linear Regression 中的 Regress ...

  9. C# 添加文本、图片到PDF文档(基于Spire.Cloud.PDF.SDK)

    Spire.Cloud.PDF.SDK提供了接口PdfTextApi及PdfImagesApi用于添加文本和图片到PDF文档,添加文本时,可格式化文本样式,包括文本字体类型.字号.字体样式.文本颜色. ...

  10. 浅谈 OpenGL 中相关阻塞问题

    昨天我遇到一个问题,问题如下: 我使用了延迟渲染,我的渲染流程是:Pass1 --> CUDA并行计算 -->Pass2 CUDA并行计算中需要使用Pass1渲染生成的两张纹理,然而我在G ...