bzoj3513
给定n个长度分别为$a_i$的木棒,问随机选择3个木棒能够拼成三角形的概率。
$a_i$和$n$都在$10^5$以内
对于每一个i,我们统计比i短的边有多少组合能组成长度<=i的
用1减去这个概率就是能拼成的概率
具体就是用sum[i]表示i出现的次数
sum[i]可以转化成如下卷积的样子
$$sum[i] = \sum_{j=1}^{i-1}sum[j] * sum[i - j - 1]$$
然后FFT
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = ;
const double pi = acos(-1.0);
struct Cint
{
double r,i;
Cint() {r = i = 0.00;}
Cint(double _r,double _i) : r(_r),i(_i){}
Cint operator + (const Cint &b)const{return Cint(r + b.r,i + b.i);}
Cint operator - (const Cint &b)const{return Cint(r - b.r,i - b.i);}
Cint operator * (const Cint &b)const{return Cint(r * b.r - i * b.i,i * b.r + r * b.i);}
}s[maxn];
int a[maxn],LEN,n;
LL sum[maxn],ans;
inline void FFT_init(Cint *a,int len)
{
for(int i = ,j = len >> ,k;i < len - ;i++)
{
if(i < j)swap(a[i],a[j]);k = len;
while(j >= (k>>=)) j -= k;
if(j <= k) j += k;
}
}
inline void FFT(Cint *a,int len,int f)
{
FFT_init(a,len);int l,i,j,k;Cint u,v;
for(l = ;l <= len;l <<= )
{
i = l >> ;
Cint w(cos(-f * * pi / l),sin(-f * * pi / l));
for(j = ;j ^ len;j += l)
{
Cint wn(1.0,0.0);
for(k = j;k ^ (i + j);k++)
{
u = a[k]; v = wn * a[i + k];
a[k] = u + v;a[k + i] = u - v;
wn = w * wn;
}
}
}
if(f == -)
for(i = ;i < len;i++)a[i] . r /= len;
} int main()
{
//freopen("ou.txt","r",stdin);
//freopen("x.txt","w",stdout);
int T;scanf("%d",&T);
while(T--)
{
scanf("%d",&n);int mx = ;ans = ;
for(int i=;i<=LEN + ;i++)s[i] = Cint(0.0,0.0);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
mx = max(mx,a[i]);
}
for(LEN = ;(LEN >> ) < mx;LEN <<= );
for(int i=;i<=n;i++)s[a[i]].r += 1.0;
FFT(s,LEN,);
for(int i=;i<LEN;i++)s[i] = s[i] * s[i];
FFT(s,LEN,-);
for(int i=;i<=n;i++)s[a[i] * ].r -= 1.0;
for(int i=;i<=LEN;i++)sum[i] = sum[i-] + floor(s[i].r + 0.5);
for(int i=;i<=n;i++)ans += sum[a[i]];
double pos = 3.0 * ans / n / (n - ) / (n - );
printf("%.7lf\n",1.0 - pos);
}
}
bzoj3513的更多相关文章
- [bzoj3513][MUTC2013]idiots_FFT
idiots bzoj-3513 MUTC-2013 题目大意:给定$n$根木棍,问随机选择三根能构成三角形的概率. 注释:$1\le n\le 3\cdot 10^5$,$1\le a_i\le 1 ...
- BZOJ3513: [MUTC2013]idiots
Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数.接下来若干行描述T组数据,每组数据第一行是n ...
- BZOJ3513[MUTC2013]idiots——FFT+生成函数
题目描述 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. 输入 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是n,接下来一行有n个 ...
- bzoj千题计划168:bzoj3513: [MUTC2013]idiots
http://www.lydsy.com/JudgeOnline/problem.php?id=3513 组成三角形的条件:a+b>c 其中,a<c,b<c 若已知 两条线段之和=i ...
- 2019.01.02 bzoj3513: [MUTC2013]idiots(fft)
传送门 fftfftfft经典题. 题意简述:给定nnn个长度分别为aia_iai的木棒,问随机选择3个木棒能够拼成三角形的概率. 思路:考虑对于木棒构造出生成函数然后可以fftfftfft出两个木 ...
- [MUTC2013][bzoj3513] idiots [FFT]
题面 传送门 思路 首先有一个容斥原理的结论:可以组成三角形的三元组数量=所有三元组-不能组成三角形的三元组 也就是说我们只要求出所有不能组成三角形的三元组即可 我们考虑三元组(a,b,c),a< ...
- 【bzoj3513】[MUTC2013]idiots FFT
题目描述 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. 输入 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是n,接下来一行有n个 ...
- 多项式相关&&生成函数相关&&一些题目(updating...)
文章目录 多项式的运算 多项式的加减法,数乘 多项式乘法 多项式求逆 多项式求导 多项式积分 多项式取对 多项式取exp 多项式开方 多项式的除法/取模 分治FFT 生成函数 相关题目 多项式的运算 ...
- 各种注意事项(还有c++的一些操作)
转c++时间: 2017年8月9号 1.记得打头文件 2.=与==的区别(赋值|比较) 3.各种运算符的比较级(与Pascal不同),主要是==与位运算 *4.在OJ上scanf和printf时间优于 ...
随机推荐
- 取出所有的Map集合
public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, St ...
- mBot试用体验
[Arduino话题] [mBot试用体验]1.mBot开箱体验(部分资料合集)http://bbs.elecfans.com/forum.php?mod=viewthread&tid=532 ...
- ArcMap中使用ArcPy实现Geometry与WKT的相互转换
在Web GIS迅猛发展的今天,使用浏览器来进行交互以其方便性.快捷性被广大用户所推崇,那么在传输格式方面,都已比較简单的JSON或者WKT来解决网络带宽带来的数据压力. 在ArcGIS10.2版本号 ...
- FTP匿名登录或弱口令漏洞及服务加固
漏洞描述 FTP 弱口令或匿名登录漏洞,一般指使用 FTP 的用户启用了匿名登录功能,或系统口令的长度太短.复杂度不够.仅包含数字.或仅包含字母等,容易被黑客攻击,发生恶意文件上传或更严重的入侵行为. ...
- python学习(八)阶段性总结
这里学习了python的一点点基础然后来总结一下 python是一个强类型的语言 数字: 数字的类型大概有:整数.浮点数.复数.固定精度的十进制数.带分子和分母的有理数 数字与字符串之间不能直接相加, ...
- 【PyCharm编辑器】之无法导入引用手动新建的包或类,报:This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases.
一.现象描述 如下图所示,手动新建个类包calculator.py,想在test.py文件引用它,发现一直报红线,引用失败 Unresolved reference 'calculator' less ...
- PS CC 破解安装教程(亲测可用)
PS CC版本新增了一些更高效的切图工具,比如可以直接右击图层转化为PNG图像 下面介绍一种亲测可用的破解安装教程 软件下载地址:https://pan.baidu.com/s/1dFJFqhj 一. ...
- swift基础教程笔记
http://www.imooc.com/learn/127 <玩儿转swift> 慕课网教程笔记,自己根据2.1的语法做了更新. I. 1.通过playground来学习.熟悉swift ...
- 【BZOJ3251】树上三角形 暴力
[BZOJ3251]树上三角形 Description 给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形.同时还支持单点修改 ...
- 【BZOJ2476】战场的数目 矩阵乘法
[BZOJ2476]战场的数目 Description Input 输入文件最多包含25组测试数据,每个数据仅包含一行,有一个整数p(1<=p<=109),表示战场的图形周长.p=0表示输 ...