题目链接

n个火柴棍取3个, 问能组成三角形的概率是多少。 kuangbin大神的博客写的很详细了..http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html

注意long long什么的就没问题了。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a) memset(a, 0, sizeof(a))
typedef complex <double> cmx;
const double PI = acos(-1.0);
const int maxn = ;
cmx x[maxn];
int a[maxn/];
ll num[maxn];
void change(cmx x[], int len) {
int i, j, k;
for(i = , j = len/; i < len - ; i++) {
if(i < j)
swap(x[i], x[j]);
k = len / ;
while(j >= k) {
j -= k;
k /= ;
}
if(j < k)
j += k;
}
}
void fft(cmx x[], int len, int on) {
change(x, len);
for(int i = ; i <= len; i <<= ) {
cmx wn(cos(-on * * PI/i), sin(-on * * PI/i));
for(int j = ; j < len; j += i) {
cmx w(, );
for(int k = j; k < j + i/; k++) {
cmx u = x[k];
cmx v = x[k + i/]*w;
x[k] = u + v;
x[k+i/] = u - v;
w *= wn;
}
}
}
if(on == -) {
for(int i = ; i < len; i++)
x[i] /= len;
}
}
int main()
{
int t, n;
cin>>t;
while (t--) {
cin>>n;
mem(num);
int maxx = ;
for (int i = ; i < n; i++) {
scanf("%d", a + i);
num[a[i]]++;
maxx = max(maxx, a[i]);
}
sort(a, a + n);
int len = ;
maxx++;
while (len < *maxx) {
len <<= ;
}
for (int i = ; i < maxx; i++) {
x[i] = cmx(num[i], );
}
for (int i = maxx; i < len; i++) {
x[i] = cmx(, );
}
fft(x, len, );
for (int i = ; i < len; i++) {
x[i] *= x[i];
}
fft(x, len, -);
for (int i = ; i < len; i++) {
num[i] = (ll)(x[i].real()+0.5);
}
for (int i = ; i < n; i++) {
num[a[i]+a[i]]--;
}
for (int i = ; i < len; i++) {
num[i] /= ;
}
for (int i = ; i < len; i++) {
num[i] += num[i-];
}
ll ans = ;
for (int i = ; i < n; i++) {
ans += num[len-] - num[a[i]];
ans -= 1LL * (n-i-) * i;
ans -= 1LL * (n-i-) * (n-i-) / ;
}
ans -= 1LL * n * (n-);
ll sum = 1LL * n * (n-) * (n-) / ;
printf("%.7f\n", 1.0*ans/sum);
}
return ;
}

hdu 4906 3-idiots fft的更多相关文章

  1. bzoj 3513: [MUTC2013]idiots FFT

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

  2. HDU 4906 Our happy ending (状压DP)

    HDU 4906 Our happy ending pid=4906" style="">题目链接 题意:给定n个数字,每一个数字能够是0-l,要选当中一些数字.然 ...

  3. hdu 5142 NPY and FFT

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5142 NPY and FFT Description A boy named NPY is learn ...

  4. HDU 4609 3-idiots(FFT)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给出n个正整数(数组A).每次随机选出三个数.问这三个数能组成三角形的概率为多大? 思路: ...

  5. bzoj 3513 [MUTC2013]idiots FFT 生成函数

    [MUTC2013]idiots Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 806  Solved: 265[Submit][Status][Di ...

  6. hdu 5730 Shell Necklace fft+cdq分治

    题目链接 dp[n] = sigma(a[i]*dp[n-i]), 给出a1.....an, 求dp[n]. n为1e5. 这个式子的形式显然是一个卷积, 所以可以用fft来优化一下, 但是这样也是会 ...

  7. HDU 4609 3-idiots (组合数学 + FFT)

    题意:给定 n 条边,问随机选出 3 条边,能组成三角形的概率是多少. 析:答案很明显就是  能组成三角形的种数 / (C(n, 3)).现在的问题是怎么求能组成三角形的种数. 这个博客说的非常清楚了 ...

  8. BZOJ3513[MUTC2013]idiots——FFT+生成函数

    题目描述 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. 输入 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是n,接下来一行有n个 ...

  9. [MUTC2013][bzoj3513] idiots [FFT]

    题面 传送门 思路 首先有一个容斥原理的结论:可以组成三角形的三元组数量=所有三元组-不能组成三角形的三元组 也就是说我们只要求出所有不能组成三角形的三元组即可 我们考虑三元组(a,b,c),a< ...

随机推荐

  1. python读取Excel

    import xlrd # 读取Excel文件 workbook = xlrd.open_workbook(r'E:\2015.xls') # 读取Excel的sheet名字 sheet_names ...

  2. StringBuilder是不是线程安全的?

    测试条件: 开启2个并行执行任务,往同一个StringBuilder对象写入值 测试代码: ; static StringBuilder sbIsThreadSafe = new StringBuil ...

  3. Linux系统编程(20)——信号基本概念

    信号及信号来源 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知 ...

  4. Binary Tree Level Order Traversal II 解答

    Question Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, ...

  5. DFS(深度优先搜索)模板

    void dfs()//参数用来表示状态 { if(到达终点状态) { ...//根据题意来添加 return; } if(越界或者是不符合法状态) return; for(扩展方式) { if(扩展 ...

  6. PHP 表单验证 - 完成表单实例

    ------------------------------------------------------------------------------------------- 本节展示如何在用 ...

  7. HDU 1559 最大子矩阵 (DP)

    题目地址:pid=1559">HDU 1559 构造二维前缀和矩阵.即矩阵上的点a[i][j]表示左上方的点为(0,0),右下方的点为(i,j)的矩阵的和.然后枚举每一个矩阵的左上方的 ...

  8. ORACLE数据库、表空间、表的容量相关查询--1

    未完待续……未完待续……未完待续……未完待续…… 1.查询某个表所占空间大小 col tablespace_name for a15 col segment_name for a15 col segm ...

  9. php错误日志级别

    ; E_ALL             所有错误和警告(除E_STRICT外) ; E_ERROR           致命的错误.脚本的执行被暂停. ; E_RECOVERABLE_ERROR   ...

  10. 创建GIF loading图片

    第一步 新建一个宽80PX 高10PX的文档 第二步 做8个宽8PX的方格 黄色色值#e7a521 红色色值#ff0000(可根据自己的喜好设定) 第三步 复制7个层(共8个图层)每个图层相应改变红色 ...