BZOJ 3513 idiots
题目传送门
分析:
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的更多相关文章
- bzoj 3513: [MUTC2013]idiots FFT
bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b< ...
- BZOJ 3513: [MUTC2013]idiots
3513: [MUTC2013]idiots Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 476 Solved: 162[Submit][Stat ...
- bzoj 3513 [MUTC2013]idiots FFT 生成函数
[MUTC2013]idiots Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 806 Solved: 265[Submit][Status][Di ...
- 【刷题】BZOJ 3513 [MUTC2013]idiots
Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是 ...
- bzoj 3513: [MUTC2013]idiots【生成函数+FFT】
想了好长时间最后发现真是石乐志 第一反应就是两边之和大于第三边,但是这个东西必须要满足三次-- 任意的两边之和合通过生成函数套路+FFT求出来(记得去掉重复选取的),然后这任意两边之和大于任意第三边可 ...
- Fast Fourier Transform
写在前面的.. 感觉自己是应该学点新东西了.. 所以就挖个大坑,去学FFT了.. FFT是个啥? 挖个大坑,以后再补.. 推荐去看黑书<算法导论>,讲的很详细 例题选讲 1.UOJ #34 ...
- bzoj千题计划168:bzoj3513: [MUTC2013]idiots
http://www.lydsy.com/JudgeOnline/problem.php?id=3513 组成三角形的条件:a+b>c 其中,a<c,b<c 若已知 两条线段之和=i ...
- 【BZOJ】【2132】圈地计划
网络流/最小割 Orz Hzwer 这类大概是最小割建模中的经典应用吧…… 黑白染色,然后反转黑色的技巧感觉很巧妙!这个转化太神奇了…… /****************************** ...
- 【BZOJ 2132】圈地计划 && 【7.22Test】计划
两种版本的题面 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土 ...
随机推荐
- java面试代码题
1.阅读 Shape 和 Circle 两个类的定义.在序列化一个 Circle 的对象 circle 到 文件时,下面哪个字段会被保存到文件中? 文件时,下面哪个字段会被保存到文件中? A. nam ...
- Servlet 的面试题
Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...
- freemarker<一>
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序. 所谓模板,就是一份已 ...
- Java面向对象程序设计第7章1-8
Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...
- 洛谷p1345---最小割的奇妙运用
让你去掉最少的点,使得c1和c2变得不连通,你有办法吗??? 这是最小割呀!!! 网络流的最小割去掉的是边,构造边的顶点的唯一关系就好了!!! 需要注意一点 #include<iostream& ...
- Spring in action读书笔记(一) 自动化装配bean
需要引入的ja包 <dependency> <groupId>org.springframework</groupId> <artifactId>spr ...
- kotlin + springboot整合mybatis操作mysql数据库及单元测试
项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller ...
- 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)
[题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...
- $Poj2956/AcWing116\ The\ Pilots\ Brothers'Refrigerator$ 二进制
AcWing $Sol$ 假设改变$[x1,y1]$和$[x2,y2]$的状态就可以达到目的.注意到先改变谁对结果是没有影响的!! 所以就可以直接枚举改变状态的结点而不需要注意顺序. $4*4$的矩阵 ...
- Cent OS防火墙配置端口开放
CentOS 6内置的防火墙为iptables,Cent OS7,内置的防火墙则是firewalld iptables 防火墙设置 1.打开/关闭/重启防火墙 #开启防火墙(重启后永久生效): chk ...