题目链接

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. FSG压缩壳和ImportREC的使用 - 脱壳篇05

    FSG压缩壳和ImportREC的使用 - 脱壳篇05 让编程改变世界 Change the world by program FSG这个壳可以说是有点儿不守妇道,尼玛你说你一个压缩壳就实现压缩功能得 ...

  2. 小希的迷宫(HDU 1272 并查集判断生成树)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. js序列化json对象

    SerializeJsonToStr : function( oJson ) { if( oJson == null ) return "null"; if( typeof(oJs ...

  4. WPF笔记(2.2 DockPanel)——Layout

    原文:WPF笔记(2.2 DockPanel)--Layout 读完了这一节,发现DockPanel就是过去winform中的Dock属性.原来的Dock属性是子控件设置,而其父亲级别不用设置.现在W ...

  5. (?m)使用实例

    示例sql: # User@Host: zjzc_app[zjzc_app] @ [10.22.18.164] Id: 6069153 # Query_time: 153.908486 Lock_ti ...

  6. 2014.8.4我出的模拟赛【你的名字叫czy是吧】

    你的名字叫czy是吧 (mynameisczy.pas/.c/.cpp) 尽管czy放了那么多只NTR酋长,也没能拦住黄巨大.黄巨大和czy相遇了…… “你的名字叫czy是吧” “……” “我们来单挑 ...

  7. 微软雅黑 firefox Css 设置 font-family: "microsoft yahei","\5FAE\8F6F\96C5\9ED1","宋体";

    font-family: "microsoft yahei","\5FAE\8F6F\96C5\9ED1","宋体";    // 这里用引 ...

  8. UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm & String<Problem L>

    L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 43000/43000KB (Java/ ...

  9. UESTC_Frozen Rose-Heads CDOJ 791

    The winter is coming and all the experts are warning that it will be the coldest one in the last hun ...

  10. 产生n bit所有可能的序列

    void binary(int n) { ) printf("%s\n",A); // Assume A is a global variable else { A[n-] = ' ...