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时间优于 ...
随机推荐
- 删除反复行SQL举例
删除反复行SQL实验简单举例 说明:实验按顺序进行.前后存在关联性.阅读时请注意.打开文件夹更便于查看. 构造实验环境: SQL> select count(*) from emp; COU ...
- 线性表的链式实现(C++)
相关内容: 线性表的顺序实现 链式实现(C语言) (推荐在GitHub上查看,下面代码只是最初实现,后续如果有修改,由于太麻烦,不会再更改下文,仅仅更新Github上的代码文件) 结点以及链表类的定义 ...
- Java方法存在于哪一区
Java运行时的数据区包括:(其中前两个是线程共享的) 1.方法区(Method Area)存储已被虚拟机加载的类信息.常量.静态变量.即编译器编译后的代码等数据 2.堆(Heap)存放对象实例,几乎 ...
- java 动态实现接口
package com.yhouse.modules.daos; public interface IUserDao { public String getUserName(); public Str ...
- UbuntuServer12.04安装MongoDB,开机自启,服务,权限
获取最新版本 去http://www.mongodb.org/downloads找最新版的链接 wget http://fastdl.mongodb.org/linux/mongodb-linux-x ...
- ip获取位置
$ip = $_SERVER["REMOTE_ADDR"]; $url = "http://ip.taobao.com/service/getIpInfo.php?ip= ...
- node / npm/ yarn 的安装以及环境变量
# node.js 10.15.3 https://npm.taobao.org/mirrors/node/v10.15.3/node-v10.15.3-x64.msi 1.安装后自动添加了环境变量: ...
- 远程访问(HttpClient和HttpResponse的使用) 原型模式
package com.webserver.webservice; import java.io.ByteArrayInputStream; import java.io.FileOutputStre ...
- Hibernate的配置文件 Hibernate.cfg.xml与xxx.hbm.xml
1.hibernate.cfg.xml配置如下: (数据库连接配置) <?xml version="1.0" encoding="UTF-8"?>& ...
- HDFS relaxes a few POSIX requirements to enable streaming access to file system data
https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html Introduction [ ...