HDU 4609 3-idiots(FFT)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609
题意:给出n个正整数(数组A)。每次随机选出三个数。问这三个数能组成三角形的概率为多大?
思路:求出有多少种选择的方案,除以总选择方案即可。用num[i]表示长度为i的出现几次。
对于样例1 3 3 4,我们得到num={0,1,0,2,1},
对num求卷积,得到:num={0,0,1,0,4,2,4,4,1}。此时的num[i]表示选择两个数和为i的选择方案的种数。 但是这里有重复的:
(1)两次不能选同一个数,这种情况要删去;
(2)对于两个数x和y,先选x后选y和先选y后选x,所以多算了一倍。
减去上面两种重复之后,我们得到:num={0,0,0,0,2,1,1,2}。接着设sum[i]为num的前缀和。接着将给出的数组A排序,开始统计答案。对于A[i]我们认为三个数中它是最大的,因此我们要选出在i之前的两个数使得其和大于A[i],首先大于A[i]的情况有sum[Maxlen]-sum[A[i]],然后要减去重的:
(1)一个选了i后面的一个选了i前面的;
(2)一个选了i另一个随便;
(3)两个都是i后面的。
struct node
{
double x,y;
node(double _x=0.0,double _y=0.0)
{
x=_x;
y=_y;
}
node operator+(node a)
{
return node(x+a.x,y+a.y);
}
node operator-(node a)
{
return node(x-a.x,y-a.y);
}
node operator*(node a)
{
return node(x*a.x-y*a.y,x*a.y+y*a.x);
}
};
node A[N];
int L;
int reverse(int x)
{
int ans=0,i;
FOR0(i,L) if(x&(1<<i)) ans|=1<<(L-1-i);
return ans;
}
void bitReverseCopy(node a[],int n)
{
int i;
FOR0(i,n) A[i]=a[i];
FOR0(i,n)
{
a[reverse(i)]=A[i];
}
}
void fft(node a[],int n,int on)
{
bitReverseCopy(a,n);
int len,i,j,k;
node x,y,u,t;
for(len=2;len<=n;len<<=1)
{
x=node(cos(-on*2*PI/len),sin(-on*2*PI/len));
for(j=0;j<n;j+=len)
{
y=node(1,0);
for(k=j;k<j+len/2;k++)
{
u=a[k];
t=y*a[k+len/2];
a[k]=u+t;
a[k+len/2]=u-t;
y=y*x;
}
}
}
if(on==-1)
{
FOR0(i,n) a[i].x/=n;
}
}
node a[N];
int d[N],n,m;
i64 num[N],sum[N];
int main()
{
rush()
{
RD(n);
clr(num,0);
int i;
FOR0(i,n) RD(d[i]),num[d[i]]++;
sort(d,d+n);
int len=d[n-1]+1;
m=1; L=0;
while(m<2*len) m<<=1,L++;
FOR0(i,len) a[i]=node(num[i],0);
for(i=len;i<m;i++) a[i]=node(0,0);
fft(a,m,1);
FOR0(i,m) a[i]=a[i]*a[i];
fft(a,m,-1);
FOR0(i,m) num[i]=(i64)(a[i].x+0.5);
m=d[n-1]<<1;
FOR0(i,n) num[d[i]<<1]--;
FOR1(i,m) num[i]>>=1,sum[i]=sum[i-1]+num[i];
i64 ans=0;
FOR0(i,n)
{
ans+=sum[m]-sum[d[i]];
ans-=(i64)i*(n-i-1);
ans-=n-1;
ans-=(i64)(n-1-i)*(n-2-i)/2;
}
i64 Sum=(i64)n*(n-1)*(n-2)/6;
PR(1.0*ans/Sum);
}
}
HDU 4609 3-idiots(FFT)的更多相关文章
- HDU 5763 Another Meaning(FFT)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5763 [题目大意] 给出两个串S和T,可以将S串中出现的T替换为*,问S串有几种表达方式. [题解 ...
- 2019.01.02 bzoj3513: [MUTC2013]idiots(fft)
传送门 fftfftfft经典题. 题意简述:给定nnn个长度分别为aia_iai的木棒,问随机选择3个木棒能够拼成三角形的概率. 思路:考虑对于木棒构造出生成函数然后可以fftfftfft出两个木 ...
- A * B Problem Plus HDU - 1402 (FFT)
A * B Problem Plus HDU - 1402 (FFT) Calculate A * B. InputEach line will contain two integers A and ...
- 快速傅里叶(FFT)的快速深度思考
关于按时间抽取快速傅里叶(FFT)的快速理论深度思考 对于FFT基本理论参考维基百科或百度百科. 首先谈谈FFT的快速何来?大家都知道FFT是对DFT的改进变换而来,那么它究竟怎样改进,它改进的思想在 ...
- HDU 5938 Four Operations(四则运算)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- HDU 5775 Bubble Sort(冒泡排序)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- HDU 1711 Number Sequence(数列)
HDU 1711 Number Sequence(数列) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- HDU 1005 Number Sequence(数列)
HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- 【BZOJ3527】力(FFT)
[BZOJ3527]力(FFT) 题面 Description 给出n个数qi,给出Fj的定义如下: \[Fj=\sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{ ...
- 【BZOJ4827】【HNOI2017】礼物(FFT)
[BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...
随机推荐
- Notes on the Dirichlet Distribution and Dirichlet Process
Notes on the Dirichlet Distribution and Dirichlet Process In [3]: %matplotlib inline Note: I wrote ...
- javascript版Ajax请求
什么是Ajax请求,Ajax也就是“Asynchronous JavaScript and XML”(异步JavaScript和XML),无刷新数据读取.能减少流量的消耗,也提高了浏览的流畅性,给用户 ...
- HDOJ 1028 Ignatius and the Princess III (母函数)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- Xmarks丢失书签
想体验下Xmarks,不同浏览器同步书签,听说很好用,就安装Chrome插件,没想到竟然把我的所有书签都丢了. 不过在网上找到了回复的办法,也很简单: 原始地址:http://irising.me/2 ...
- LINGO使用教程(一)
LINGO是用来求解线性和非线性优化问题的简易工具.LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果. 1.LINGO快速入门 当你在 ...
- Visual Studio 自定义控件不显示在工具箱
工具=>选项=>Windows窗体设计器=>常规=>AutoToolBoxPopulate=>True
- 自动化 测试框架部署(python3+selenium2)
安装Python 从https://www.python.org/downloads/下载最新版本的Python3,请注意,是3: 需要将Python的安装目录和安装目录下的Scripts文件夹添加到 ...
- jquery 中$.post获取MVC Controller中JsonResult返回包含LIst<Model>类型的子List<Model>的高级使用方法
比如JsonResult中返回return Json(models);的models结构如下: models返回含有四个集合的序列,每个集合的序列中又包含一个子集合序列“Child”. 问题是如果我们 ...
- 如何学好oracle?(准备)
循序渐进 多练习 http://www.tudou.com/listplay/ScoGxMJZGQc/Nw9HE62XiGo.html
- SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-004-使用NamedParameterJdbcTemplate
为了使查询数据库时,可以使用命名参数,则要用NamedParameterJdbcTemplate 1.Java文件配置 @Bean public NamedParameterJdbcTemplate ...