HDU 4709 3-idiots FFT 多项式
http://acm.hdu.edu.cn/showproblem.php?pid=4609
给一堆边,求这一堆边随便挑三个能组成三角形的概率。
裸fft,被垃圾题解坑了还以为很难。
最长的边的长度小于其余两边之和是组成三角形的充要条件,fft搞搞就行了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<complex>
using namespace std;
#define LL long long
const int maxn=;
double Pi;
typedef complex< double >cd;
cd b[maxn]={};
LL a[maxn]={},cnt[maxn]={};
int bel[maxn]={},s,bt;
void getit(){for(int i=;i<s;++i)bel[i]=(bel[i>>]>>)|((i&)<<(bt-));}
void fft(cd *c,int n,int dft){
for(int i=;i<n;++i)if(bel[i]>i)swap(c[i],c[bel[i]]);
for(int step=;step<n;step<<=){
cd w=cd(cos(Pi/(double)step),sin(Pi/(double)step)*(double)dft);
for(int j=;j<n;j+=(step<<)){
cd z=cd(1.0,);
for(int i=j;i<j+step;++i){
cd x=c[i],y=c[i+step]*z;
c[i]=x+y;c[i+step]=x-y;
z=z*w;
}
}
}
if(dft==-)for(int i=;i<n;++i)c[i]/=n;
}
int main(){
Pi=acos(-1.0);
int T;scanf("%d",&T);
while(T-->){
int n;scanf("%d",&n);
memset(cnt,,sizeof(cnt));
for(int i=;i<n;++i){scanf("%d",&a[i]);cnt[a[i]]+=;} sort(a,a+n); int siz=a[n-]+;
for(int i=;i<siz;++i)b[i]=cd(cnt[i],);
for(int i=siz;i<s;++i)b[i]=cd(,); siz*=; bt=; s=; for(;s<siz;++bt)s<<=; getit();
fft(b,s,);
for(int i=;i<s;++i)b[i]=b[i]*b[i];
fft(b,s,-);
for(int i=;i<=s;++i)cnt[i]=(LL)(b[i].real()+0.5);
for(int i=;i<s;++i)b[i]=cd(,); s=a[n-]*;
for(int i=;i<n;++i)--cnt[a[i]*];
for(int i=;i<=s;++i)cnt[i]/=;
for(int i=;i<=s;++i)cnt[i]+=cnt[i-]; LL ans=;
for(int i=;i<n;++i){
ans+=cnt[s]-cnt[a[i]];
ans-=(LL)(n--i)*i;
ans-=n-;
ans-=(LL)(n--i)*(n-i-)/;
}
LL sum=(LL)n*(n-)*(n-)/;
printf("%.7f\n",(double)(ans)/(double)(sum));
}
return ;
}
HDU 4709 3-idiots FFT 多项式的更多相关文章
- 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]
1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...
- bzoj 3513: [MUTC2013]idiots FFT
bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b< ...
- hdu 4709:Herding(叉积求三角形面积+枚举)
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 学习数论 HDU 4709
经过杭师大校赛的打击,明白了数学知识的重要性 开始学习数论,开始找题练手 Herding HDU - 4709 Little John is herding his father's cattles. ...
- hdu 5730 Shell Necklace [分治fft | 多项式求逆]
hdu 5730 Shell Necklace 题意:求递推式\(f_n = \sum_{i=1}^n a_i f_{n-i}\),模313 多么优秀的模板题 可以用分治fft,也可以多项式求逆 分治 ...
- HDU 1402 A * B Problem Plus 快速傅里叶变换 FFT 多项式
http://acm.hdu.edu.cn/showproblem.php?pid=1402 快速傅里叶变换优化的高精度乘法. https://blog.csdn.net/ggn_2015/artic ...
- hdu 5142 NPY and FFT
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5142 NPY and FFT Description A boy named NPY is learn ...
- HDU 4609 3-idiots(FFT)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给出n个正整数(数组A).每次随机选出三个数.问这三个数能组成三角形的概率为多大? 思路: ...
- hdu - 4709 - Herding
题意:给出N个点的坐标,从中取些点来组成一个多边形,求这个多边形的最小面积,组不成多边形的输出"Impossible"(测试组数 T <= 25, 1 <= N < ...
随机推荐
- eclipse 关闭控制台 自动弹出
Eclipse的控制台console有时候经常的跳出来,非常的烦人! 尤其是在调试期间跳出,以下是分享一下设置操作: 让它不经常的调出来,可以按下面的操作去掉它: windows -> p ...
- CF&&CC百套计划4 Codeforces Round #276 (Div. 1) A. Bits
http://codeforces.com/contest/484/problem/A 题意: 询问[a,b]中二进制位1最多且最小的数 贪心,假设开始每一位都是1 从高位i开始枚举, 如果当前数&g ...
- 《高性能MySQL》——第一章MySQL的架构与历史
1.可以使用SHOW TABLE STATUS查询表的相关信息. 2.默认存储引擎是InnoDB,如果没有什么很特殊的要求,InnoDB引擎是我们最好的选择. 3.mysql的infobright引擎 ...
- Internet Explorer 6 的15个讨厌的bug和简单的解决方法
关于bug更全的,我推荐去这个网站hasLayout,整理的非常全!三年前就看了,最近手生,又翻出来看看~~虽然上面有很多bug讲解,但是我觉得目前用的比较多或者说是常见的应该属下面这篇文章,15 a ...
- CF359B Permutation (构造)
CF359B Permutation \(solution:\) 作为一道构造题,这题也十分符合构造的一些通性----(找到一些规律,然后无脑循环). 构造一个长度为 \(2n\) 的排列 \(a\) ...
- PCA和白化练习之处理二维数据
在很多情况下,我们要处理的数据的维度很高,需要提取主要的特征进行分析这就是PCA(主成分分析),白化是为了减少各个特征之间的冗余,因为在许多自然数据中,各个特征之间往往存在着一种关联,为了减少特征之间 ...
- HTTP::UserAgent注意问题
例用 HTTP::Request 设置头信息时, 比如 add-content , 第二次再执行 add-content 时, content 内容会追加, 并不会重新添加. 当下次再 add-con ...
- 6 个 Linux 运维典型问题,大牛的分析解决思路在这里 【转】
作为一名合格的 Linux 运维工程师,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示 ...
- 一些对外的服务(例如lnmp)都不用root执行
lnmp lamp等需要对外的服务,都不用root用户执行进程 缺点: 如果php程序使用root运行,万一你的程序有漏洞,被拿到了web shell,那么黑客将直接拥有root权限进入你的系统 对于 ...
- 关于sklearn,监督学习几种模型的对比
# K近邻,适用于小型数据集,是很好的基准模型,容易解释 from sklearn.neighbors import KNeighborsClassifier # 线性模型,非常可靠的首选算法,适用于 ...