想了好长时间最后发现真是石乐志
第一反应就是两边之和大于第三边,但是这个东西必须要满足三次……
任意的两边之和合通过生成函数套路+FFT求出来(记得去掉重复选取的),然后这任意两边之和大于任意第三边可以用一个前缀和求得(同样记得去重,前缀和里面一定包含前两条边),这样我们就得到了任意两边之和大于任意第三边的组数(这里是算顺序的,(1,2,3)(2,1,3)要算两遍)
然后考虑任意选三条边方案数(算顺序),是\( 6*C_n^3 \),注意到不符合要求的三条边一定是满足两次两边之和大于第三边的,所以(总方案数-任意两边之和大于任意第三边的组数)/2就是不合法的三条边方案数(不算顺序),然后也就能得到合法的三条边方案数(不算顺序)了
然后除掉总方案数就是概率

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int N=300005;
int T,n,m,q[N],bt,lm,re[N],s[N];
long long ans;
struct cd
{long double a,b;cd(long double A=0,long double B=0){a=A,b=B;}cd operator + (const cd &x) const{return cd(a+x.a,b+x.b);}cd operator - (const cd &x) const{return cd(a-x.a,b-x.b);}cd operator * (const cd &x) const{return cd(a*x.a-b*x.b,a*x.b+b*x.a);}
}a[N];
int read()
{int r=0,f=1;char p=getchar();while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
void dft(cd a[],int f)
{for(int i=0;i<lm;i++)if(i<re[i])swap(a[i],a[re[i]]);for(int i=1;i<lm;i<<=1){cd wi=cd(cos(M_PI/i),f*sin(M_PI/i));for(int k=0;k<lm;k+=(i<<1)){cd w=cd(1,0),x,y;for(int j=0;j<i;j++){x=a[j+k],y=w*a[i+j+k];a[j+k]=x+y,a[i+j+k]=x-y;w=w*wi;}}}if(f==-1)for(int i=0;i<lm;i++)a[i].a/=lm;
}
int main()
{T=read();while(T--){memset(s,0,sizeof(s));memset(a,0,sizeof(a));m=0;n=read();for(int i=1;i<=n;i++)q[i]=read(),s[q[i]]++,a[q[i]].a+=1,m=max(m,q[i]);for(int i=1;i<=m*2;i++)s[i]+=s[i-1];for(bt=0;(1<<bt)<=2*m;bt++);lm=(1<<bt);for(int i=0;i<lm;i++)re[i]=(re[i>>1]>>1)|((i&1)<<(bt-1));dft(a,1);for(int i=0;i<lm;i++)a[i]=a[i]*a[i];dft(a,-1);for(int i=1;i<=n;i++)a[q[i]+q[i]].a-=1;ans=1ll*n*(n-1)*(n-2);for(int i=1;i<=2*m;i++)ans-=(long long)(a[i].a+0.5)*(s[i-1]-2);//cerr<<ans<<endl;ans=1ll*n*(n-1)*(n-2)/6-ans/2;//cerr<<ans<<endl;printf("%.7Lf\n",(long double)ans*6/(long double)n/(long double)(n-1)/(long double)(n-2));}return 0;
}

转载于:https://www.cnblogs.com/lokiii/p/10039107.html

bzoj 3513: [MUTC2013]idiots【生成函数+FFT】相关推荐

  1. bzoj 3513: [MUTC2013]idiots FFT

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

  2. BZOJ 3513: [MUTC2013]idiots [FFT]

    统计每种长度的木棒数量,先计算出两根棒子能构成的长度,想到卷积.1.拿这个序列卷积自己 2.计算重算的部分,首先是一条边自己和自己的这种情况,另一种是(i,j)和(j,i)这种形式.第一种,可以枚举读 ...

  3. 2019.01.02 bzoj3513: [MUTC2013]idiots(fft)

    传送门 fftfftfft经典题. 题意简述:给定nnn个长度分别为aia_iai​的木棒,问随机选择3个木棒能够拼成三角形的概率. 思路:考虑对于木棒构造出生成函数然后可以fftfftfft出两个木 ...

  4. 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  5. 解题报告(二)C、(darkBZOJ 3771)Triple(生成函数 + FFT + 容斥原理)(3)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  6. #3771. Triple 生成函数 + FFT + 容斥

    传送门 文章目录 题意: 思路: 题意: 思路: 注意到这个题是求若干个数的组合数,(a,b),(b,a)(a,b),(b,a)(a,b),(b,a)视为一种方案,所以我们考虑生成一个普通型生成函数. ...

  7. CodeChefSeries Sum (伯努利数+生成函数+FFT)

    题面 传送门 给定\(a_1,..,a_n\),定义\(f(x,k)=\sum_{i=1}^n(x+a_i)^k,g(t,k)=\sum_{x=0}^tf(x,k)\),给定\(T,K\),请你对\( ...

  8. BZOJ 3527: [ZJOI2014]力(FFT)

    题意 给出\(n\)个数\(q_i\),给出\(Fj\)的定义如下: \[F_j=\sum \limits _ {i < j} \frac{q_iq_j}{(i-j)^2}-\sum \limi ...

  9. BZOJ 4259: 残缺的字符串 [FFT]

    4259: 残缺的字符串 题意:s,t,星号任意字符,匹配方案数 和上题一样 多乘上一个\(a_{j+i}\)就行了 #include <iostream> #include <cs ...

最新文章

  1. 系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转载)
  2. 最高奖金5万|带打目标检测大赛!还给匹配神助攻队友!
  3. 独家 | 计算学习理论简介(附资源推荐)
  4. 【最佳实践】如何通过OSS的Bucket Policy设置访问授权?
  5. 基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题
  6. gazebo仿真环境加载多个机器人
  7. 复制并重命名文件_视频文件太大怎么办?快速压制视频只需一招,好多大咖都在用...
  8. 【ArcGIS Pro微课1000例】0014:两种坐标系全国1km分辨率DEM下载地址(WGS84+Albers投影)
  9. 前端学习(2956):项目中组件的本地注册
  10. CentOS7.2安装MySql5.7并开启远程连接授权
  11. Linux的网络管理命令使用总结
  12. Jenkins部署Web项目到远程tomcat(通过jenkins插件)
  13. 看看MySQL几种主流备份方案的优缺点
  14. python装饰器用法
  15. 2018华为软件精英大赛
  16. 清华大学出版社2013年第二期书评征集图书列表
  17. leetcode 5855. 找出数组中的第 K 大整数(C++、java、python)
  18. 经济基础知识(中级)【2】
  19. Windows 查看已保存wifi密码
  20. Revit二次开发——revit怎么给桥梁加钢筋

热门文章

  1. 纯前端开发案例:用 SpreadJS 搭建信息系统软件开发平台
  2. 微信小程序 --- 获取网络状态
  3. PDF 补丁丁 0.6.0.3369 版发布(修复保存文件时文件名替代符失效的问题)
  4. .Net 高效开发之不可错过的实用工具
  5. OpenStack进入第二阶段需要解决的“七宗罪”
  6. 从2018百度前端技术学院看代码究竟应该怎么写(2)
  7. 判断条件UVa 10192 - Vacation(LCS水题)
  8. navigator属性
  9. python 魔法方法常用_12个常用的IPython魔法命令
  10. html文件整体结构,HTML文件基本结构