解题:HDU 4609 Three Idiots
要求组合的方法显然我们需要对桶卷积,即设$F(x)=\sum\limits_{i=1}^{maxx}x^{cnt[i]}$,然后我们初步的先把$F^2(x)$卷出来,表示选两条边。然后我们发现如果用“两边之和大于第三边”来求,那么小于这两条边的可能不是最长的,所以应该枚举大于这两条边的来容斥
注意题目中提到了不能选重复的,所以对于所有指数为偶数的项去重,还有题目要求是无序地选
- #include<cmath>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=,M=,K=4e5;
- const double pai=acos(-);
- struct cpx
- {
- double x,y;
- }a[N];
- cpx operator + (cpx a,cpx b)
- {
- return (cpx){a.x+b.x,a.y+b.y};
- }
- cpx operator - (cpx a,cpx b)
- {
- return (cpx){a.x-b.x,a.y-b.y};
- }
- cpx operator * (cpx a,cpx b)
- {
- double x1=a.x,x2=b.x,y1=a.y,y2=b.y;
- return (cpx){x1*x2-y1*y2,x1*y2+x2*y1};
- }
- long long cnt[N],tot,ans;
- int mem[N],rev[N],lgg[N];
- double Sin[M],Cos[M];
- int n,m,T,rd;
- int Round(double x)
- {
- return (int)(x+0.5);
- }
- void Prework()
- {
- scanf("%d",&T);
- for(int i=;i<=K;i++)
- lgg[i]=lgg[i>>]+;
- for(int i=;i<=;i++)
- Sin[i]=sin(*pai/(<<i)),Cos[i]=cos(*pai/(<<i));
- }
- void Trans(cpx *c,int t)
- {
- for(int i=;i<n;i++)
- if(rev[i]>i) swap(c[rev[i]],c[i]);
- for(int i=;i<=n;i<<=)
- {
- int len=i>>;
- cpx omg=(cpx){Cos[lgg[i]],Sin[lgg[i]]*t};
- for(int j=;j<n;j+=i)
- {
- cpx ori=(cpx){,},tmp;
- for(int k=j;k<j+len;k++,ori=ori*omg)
- tmp=ori*c[k+len],c[k+len]=c[k]-tmp,c[k]=c[k]+tmp;
- }
- }
- if(t==-) for(int i=;i<n;i++) c[i].x/=n;
- }
- int main()
- {
- Prework();
- while(T--)
- {
- scanf("%d",&n);
- memset(mem,,sizeof mem),m=;
- for(int i=;i<=n;i++)
- {
- scanf("%d",&rd);
- mem[rd]++,m=max(m,rd);
- }
- ans=tot=1ll*n*(n-)*(n-)/,n=; while(n<=m*) n<<=;
- for(int i=;i<n;i++) a[i].x=mem[i],a[i].y=;
- for(int i=;i<n;i++) rev[i]=(rev[i>>]>>)+(i&)*(n>>);
- Trans(a,);
- for(int i=;i<n;i++) a[i]=a[i]*a[i];
- Trans(a,-);
- for(int i=;i<=m;i++) cnt[i]=Round(a[i].x);
- for(int i=;i<=m;i++)
- {
- if(i%==) cnt[i]-=mem[i>>];
- cnt[i]>>=,cnt[i]+=cnt[i-];
- }
- for(int i=;i<=m;i++) ans-=cnt[i]*mem[i];
- printf("%.7f\n",(double)ans/tot);
- }
- return ;
- }
解题:HDU 4609 Three Idiots的更多相关文章
- 快速傅里叶变换应用之二 hdu 4609 3-idiots
快速傅里叶变化有不同的应用场景,hdu4609就比较有意思.题目要求是给n个线段,随机从中选取三个,组成三角形的概率. 初始实在没发现这个怎么和FFT联系起来,后来看了下别人的题解才突然想起来:组合计 ...
- hdu 4609 3-idiots [fft 生成函数 计数]
hdu 4609 3-idiots 题意: 给出\(A_i\),问随机选择一个三元子集,选择的数字构成三角形的三边长的概率. 一开始一直想直接做.... 先生成函数求选两个的方案(注意要减去两次选择同 ...
- hdu 4609 3-idiots <FFT>
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意: 给定 N 个正整数, 表示 N 条线段的长度, 问任取 3 条, 可以构成三角形的概率为多 ...
- hdu 4609 3-idiots
http://acm.hdu.edu.cn/showproblem.php?pid=4609 FFT 不会 找了个模板 代码: #include <iostream> #include ...
- HDU 4609 3-idiots(FFT)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给出n个正整数(数组A).每次随机选出三个数.问这三个数能组成三角形的概率为多大? 思路: ...
- HDU 4609 FFT模板
http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给你n个数,问任意取三边能够,构成三角形的概率为多少. 思路:使用FFT对所有长度的个数进行卷积(\ ...
- hdu 4609 3-idiots——FFT
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4609 答案就是随便选三条边的方案 - 不合法的方案. 不合法的方案就是算出 x+y = k 的方案数 g[ ...
- hdu 4609 3-idiots —— FFT
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4609 算不合法的比较方便: 枚举最大的边,每种情况算了2次,而全排列算了6次,所以还要乘3: 注意枚举最大 ...
- FFT(快速傅里叶变换):HDU 4609 3-idiots
3-idiots Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
随机推荐
- gcc 与 g++的区分较
一:gcc与g++比较 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为 ...
- 在虚拟机上搭建物理机可访问的web服务(IIS)
0x0 前言 安装webug4.0的时候突发奇想,想学下如何在虚拟机里搭建网站,然后让主机像访问互联网的网站一样访问虚拟机的网站,为以后渗透测试搭建环境做准备 0x1 虚拟机安装win2003[以防万 ...
- 方正 ignb路由器设置备份(自用笔记)
192.168.15.96255.255.255.0192.168.15.1219.232.46.61219.141.136.10
- t团队项目计划
团队的backlog: .用户登录网站后,可以选择是买或者卖, (1)买 点击链接,可以分类浏览商品信息,也可以按价钱筛选 (2)卖 点击链接,选择要挂出的商品种类,填写信息(名称.价格.数量等)接着 ...
- My Sql数据库设置环境变量和字符集
一.踩坑背景 之前开发中一直用的是sql server 数据库,最近接到公司一个老的项目,用的my sql数据库做的,功能做了一大部分,现在客户要求对原程序和数据库进行服务器的迁移工作.产品经理给出 ...
- java对文件的操作
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用 ...
- Firefox插件开发学习总结
2018.06.14 我们小组最初只准备开发运行在google上的知乎插件,但我们经过调研发现还有一大部分用户是使用的火狐浏览器,所以我们也准备制作火狐插件.以下是我学习了部分火狐插件制作知识后的总结 ...
- GC 年轻代 老年代 持久代
转载自:http://www.cnblogs.com/yaoyuan23/p/5587548.html 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Gener ...
- 使用docker inspect获取数据卷信息时返回地址为空
使用 docker inspect 命令查看容器挂载的volume的目录 $ sudo docker inspect --format "{{.Volumes}}" redis-m ...
- 定时任务中的备份不同的数据库中的所有的表,每个表使用单独的sql备份文件
#! /bin/bash # 指定用户 USER=root # 指定密码 PASS=123456 # 指定主机地址 HOST=localhost # 指定备份的目录 BACKUP=/backup/sq ...