题目传送门

分析:

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. java面试代码题

    1.阅读 Shape 和 Circle 两个类的定义.在序列化一个 Circle 的对象 circle 到 文件时,下面哪个字段会被保存到文件中? 文件时,下面哪个字段会被保存到文件中? A. nam ...

  2. Servlet 的面试题

    Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...

  3. freemarker<一>

    FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序. 所谓模板,就是一份已 ...

  4. Java面向对象程序设计第7章1-8

    Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...

  5. 洛谷p1345---最小割的奇妙运用

    让你去掉最少的点,使得c1和c2变得不连通,你有办法吗??? 这是最小割呀!!! 网络流的最小割去掉的是边,构造边的顶点的唯一关系就好了!!! 需要注意一点 #include<iostream& ...

  6. Spring in action读书笔记(一) 自动化装配bean

    需要引入的ja包 <dependency> <groupId>org.springframework</groupId> <artifactId>spr ...

  7. kotlin + springboot整合mybatis操作mysql数据库及单元测试

    项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller ...

  8. 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)

    [题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...

  9. $Poj2956/AcWing116\ The\ Pilots\ Brothers'Refrigerator$ 二进制

    AcWing $Sol$ 假设改变$[x1,y1]$和$[x2,y2]$的状态就可以达到目的.注意到先改变谁对结果是没有影响的!! 所以就可以直接枚举改变状态的结点而不需要注意顺序. $4*4$的矩阵 ...

  10. Cent OS防火墙配置端口开放

    CentOS 6内置的防火墙为iptables,Cent OS7,内置的防火墙则是firewalld iptables 防火墙设置 1.打开/关闭/重启防火墙 #开启防火墙(重启后永久生效): chk ...