【FFT】HDU4609-3 idiots
..退化为一天两题了,药丸..
【题目大意】
给出n根木棍的长度,求从其中取出3根能组成三角形的概率。
【思路】

然后枚举求前缀和,枚举最长边。假设最长边为l,先求出所有两边之和大于它的情况数。然后减去两边都大于它的情况以及一大一小的情况。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<complex>
#include<cmath>
#define pi acos(-1)
using namespace std;
const int MAXN = ;
typedef complex<double> com;
typedef long long ll;
int n,m,L,tmpn;
com a[MAXN],b[MAXN];
int c[MAXN],Rev[MAXN],l[MAXN],len;
ll sum[MAXN],num[MAXN];//把sum和num放在子程序里就会错误,放进主程序就可以,为什么?? void get_bit(){for (n=,L=;n<m;n<<=) L++;}
void get_Rtable(){for (int i=;i<n;i++) Rev[i]=(Rev[i>>]>>)|((i&)<<(L-));}
void multi(com* a,com* b){for (int i=;i<n;i++) a[i]*=b[i];} void FFT(com* a,int flag)
{
for (int i=;i<n;i++)if(i<Rev[i])swap(a[i],a[Rev[i]]); //利用逆序表,快速求逆序
for (int i=;i<n;i<<=)
{
com wn(cos(*pi/(i*)),flag*sin(*pi/(i*)));
for (int j=;j<n;j+=(i<<))
{
com w(,);
for (int k=;k<i;k++,w*=wn)
{
com x=a[j+k],y=w*a[j+k+i];
a[j+k]=x+y;
a[j+k+i]=x-y;
}
}
}
if (flag==-) for (int i=;i<n;i++) a[i]/=n;
} void init()
{
int tmp[MAXN/];
scanf("%d",&n);
tmpn=n;
memset(tmp,,sizeof(tmp));
memset(Rev,,sizeof(Rev));
len=-;
for (int i=;i<n;i++)
{
scanf("%d",&l[i]);
if (len<l[i]) len=l[i];
tmp[l[i]]++;
}
for (int i=;i<MAXN;i++) a[i]=b[i]=();
for (int i=;i<=len;i++) a[i]=(tmp[i]);
} void solve()
{
m=len<<;
len++;m++;
get_bit();
get_Rtable();
FFT(a,);
for (int i=;i<n;i++) b[i]=a[i];
multi(a,b);
FFT(a,-);
} void get_ans()
{
memset(sum,,sizeof(sum));
memset(num,,sizeof(num));
for (int i=;i<m;i++) num[i]=(ll)(a[i].real()+0.5);
//减掉取两个相同的组合
for(int i =;i<tmpn;i++)
{
num[l[i]+l[i]]--;
}
for (int i=;i<m;i++) num[i]/=;
sum[]=; for (int i=;i<m;i++) sum[i]=sum[i-]+num[i]; ll cnt=;
n=tmpn;
for (int i=;i<n;i++)
{
cnt+=sum[m-]-sum[l[i]];
//减掉一个取大,一个取小的
cnt-= (ll)(n--i)*i;
//减掉一个取本身,另外一个取其它
cnt-= (n-);
//减掉大于它的取两个的组合
cnt-= (ll)(n--i)*(n-i-)/;
}
ll tot = (ll)n*(n-)*(n-)/;
printf("%.7lf\n",(double)cnt/tot); } int main()
{
int T;
scanf("%d",&T);
while (T--)
{
init();
solve();
get_ans();
}
return ;
}
【FFT】HDU4609-3 idiots的更多相关文章
- 【BZOJ3527】【FFT】力
[问题描述]给出n个数qi,给出Fj的定义如下:令Ei=Fi/qi.试求Ei.[输入格式]输入文件force.in包含一个整数n,接下来n行每行输入一个数,第i行表示qi.[输出格式]输出文件forc ...
- 【清橙A1084】【FFT】快速傅里叶变换
问题描述 离散傅立叶变换在信号处理中扮演者重要的角色.利用傅立叶变换,可以实现信号在时域和频域之间的转换. 对于一个给定的长度为n=2m (m为整数) 的复数序列X0, X1, …, Xn-1,离散傅 ...
- 【HDU1402】【FFT】A * B Problem Plus
Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to e ...
- 「洛谷3338」「ZJOI2014」力【FFT】
题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...
- 【FFT】BZOJ2179- FFT快速傅立叶
[题目大意] 给出n位十进制a和b,求a*b. [思路] FFT.感觉弄起来比较麻烦,不如直接背板子. 注意一下MAXN的取值,我一开始非常随意地就写了60000*2+50,其实n是要扩展到最接近的2 ...
- BZOJ3527 [Zjoi2014]力 【fft】
题目 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入格式 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. 输出格式 n行,第i行输出Ei.与标准答案误差不超过 ...
- CF993E Nikita and Order Statistics 【fft】
题目链接 CF993E 题解 我们记小于\(x\)的位置为\(1\),否则为\(0\) 区间由端点决定,转为两点前缀和相减 我们统计出每一种前缀和个数,记为\(A[i]\)表示值为\(i\)的位置出现 ...
- BZOJ3160【万径人踪灭】 【FFT】
..恩 打了四五遍 不会也背出来了.. BZOJ3160 [听说时限紧?转C++的优势么?] 上AC代码 fft /*Problem: 3160 User: cyz666 Language: C++ ...
- 【FFT】专题总结
学了若干天终于学(bei)会了传说中的法法塔 感觉也没那么难用嘛 fft快速傅里叶变换 在大表课件上写就是解决高精乘的工具 其实很有理有据 fft就是用复数的折半引理优化两个多项式相乘的高端东西 他能 ...
随机推荐
- Java多线程学习(五)线程间通信知识点补充
系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...
- 关于$->aaa->bbb();的困惑
第21行为什么可以调用test类的aa方法呢? 答:因为前一行(20)其已经被实例化了.所以现在的$this->obj其实可以相当于是一个对象. 20行和21行也可以写成如下 $xxoo = n ...
- Django rest framework + Vue简单示例
构建vue项目参考这篇文章https://segmentfault.com/a/1190000008049815 一.创建Vue项目 修改源:npm config set registry https ...
- python基础===继承和多继承
继承 class A: def spam(self): print("A.SPAM") def add(self, x,y): return x+y class B(A): def ...
- python基础===创建大量对象是节省内存方法
问题: 你的程序要创建大量(可能上百万) 的对象,导致占用很大的内存. 解决方案: 对于主要是用来当成简单的数据结构的类而言,你可以通过给类添加__slots__属性来极大的减少实例所占的内存.比如: ...
- ASP.NET MVC 文件上传
如果想要用HTML表单实作文件上传的功能,那么必须在输出的<form>表单标签加上一个enctype属性,且内容必须设定为multipart/form-data,要通过Html.Begin ...
- 【洛谷P3651】展翅翱翔之时
难以吐槽出题人的中二病…… 这题有点类似ZJOI2008 骑士,先跑树上的,最后拆环即可. #include<bits/stdc++.h> #define N 100005 typedef ...
- FISCO-BCOS平台共识
FISCO-BCOS 应用于区块链的多节点并行拜占庭容错共识算法 看了下微众平台的wiki共识知识 学习下 ()内是自己的思考 参考: https://github.com/FISCO-BCOS/W ...
- C基础 mariadb处理简单案例
引言 MariaDB 是一款灰常不错开源数据库. 这里直接用它来解决业务问题. 业务需求: 现在数据库中表示按照天分表的. 突然我们需要按照月来处理数据. 例如输入一个玩家id, 查找这个玩家这个月内 ...
- linux的基本的命令行操作
linux的基本的命令行操作 第一步前登陆你的服务器 //创建文件夹的方法 mkdir 文件名 //进入指定文件夹 cd 文件名 //查看文件夹下的内容 ls or ll // 查看当前的路径 pwd ...