给N个木棍问任选三个可组合出三角形的概率

以前写的,整理整理存个档

//#pragma comment(linker, "/STACK:1024000000,1024000000")
//#include<bits/stdc++.h>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
#include<iostream>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<iomanip>
using namespace std;
#define ll long long
#define pb push_back
#define FOR(a) for(int i=1;i<=a;i++)
const double PI = acos(-1.0);struct complex
{double r, i;       //real and imagecomplex(double _r = 0, double _i = 0){r = _r; i = _i;}complex operator +(const complex &b){return complex(r + b.r, i + b.i);}complex operator -(const complex &b){return complex(r - b.r, i - b.i);}complex operator *(const complex &b){return complex(r*b.r - i*b.i, r*b.i + i*b.r);}
};
void change(complex y[], int len)
{int i, j, k;for (i = 1, j = len / 2; i < len - 1; i++){if (i < j)swap(y[i], y[j]);k = len / 2;while (j >= k){j -= k;k /= 2;}if (j < k)j += k;}
}
void fft(complex y[], int len, int on)
{change(y, len);for (int h = 2; h <= len; h <<= 1){complex wn(cos(-on * 2 * PI / h), sin(-on * 2 * PI / h));for (int j = 0; j < len; j += h){complex w(1, 0);for (int k = j; k < j + h / 2; k++){complex u = y[k];complex t = w*y[k + h / 2];y[k] = u + t;y[k + h / 2] = u - t;w = w*wn;}}}if (on == -1)for (int i = 0; i < len; i++)y[i].r /= len;
}const int maxn = 4e5 + 6;
complex x1[maxn];
int arr[maxn >> 2];
ll num[maxn]; ll sum[maxn];int main() {int T, n;scanf("%d", &T);while (T--) {memset(num, 0, sizeof num);scanf("%d", &n);for (int i = 0; i<n; i++) {scanf("%d", &arr[i]);num[arr[i]]++;}sort(arr, arr + n);int len1 = arr[n - 1] + 1;                  //数域范围int len = 1;while (len<2 * len1)len <<= 1;             //扩充成最小2的幂次,即多项式项数for (int i = 0; i<len1; i++)x1[i] = complex(num[i], 0);for (int i = len1; i<len; i++)x1[i] = complex(0, 0);fft(x1, len, 1);                   //应用2n阶的fft计算出A(x)的点值表达for (int i = 0; i<len; i++)x1[i] = x1[i] * x1[i]; //逐点相乘,O(n)fft(x1, len, -1);                    //对2n个点值应用fft,计算其逆dftfor (int i = 0; i<len; i++) {num[i] = (long long)(x1[i].r + 0.5);}len = 2 * arr[n - 1];                       //从2的幂次缩回原来那么大
/************************************************************************************************************///减掉相同组合for (int i = 0; i<n; i++)num[arr[i] + arr[i]]--;//选择无序,地位等价for (int i = 1; i <= len; i++)num[i] /= 2;sum[0] = 0;for (int i = 1; i <= len; i++)sum[i] = sum[i - 1] + num[i];ll cnt = 0;for (int i = 0; i<n; i++) {cnt += sum[len] - sum[arr[i]];cnt -= (long long)(n - 1 - i)*i;cnt -= n - 1;cnt -= (long long)(n - 1 - i)*(n - i - 2) / 2;}ll tot = 1ll * n*(n - 1)*(n - 2) / 6;printf("%.7lf\n", (double)cnt / tot);}
}

转载于:https://www.cnblogs.com/Drenight/p/8611212.html

3-idiots HDU - 4609 FFT模板相关推荐

  1. HDU 4609 FFT

    题目大意 给定n条边的边值,求任意取三条边能组成三角形的概率 这里概率 P = valid/tot tot = (n-2)*(n-1)*n/6是没问题的 valid表示合法的方式 先考虑,任意两条边组 ...

  2. hdu 4609 3-idiots(FFT计数)

    题目链接:hdu 4609 3-idiots 题意: 给你n条线段.问随机取三个,可以组成三角形的概率. 题解: FFT搞,具体可看kuangbin菊苣的详细题解:传送门 1 #include< ...

  3. 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  4. HDU 4609 3-idiots

    HDU - 4609 思路: 记录每个木棍长度出现的次数,然后就可以用用类似多项式的乘法(专业术语:卷积,因为是下标和为一特定值的积的和(x+y=k),相当于在笛卡尔坐标系中将这条直线卷起来,故得名卷 ...

  5. 快速傅里叶变换应用之二 hdu 4609 3-idiots

    快速傅里叶变化有不同的应用场景,hdu4609就比较有意思.题目要求是给n个线段,随机从中选取三个,组成三角形的概率. 初始实在没发现这个怎么和FFT联系起来,后来看了下别人的题解才突然想起来:组合计 ...

  6. HDU 4609 3-idiots FFT

    3-idiots 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4609 Description King OMeGa catched three m ...

  7. HDU 4609 3-idiots(FFT)

    3-idiots 思路 多项式卷积的经典应用了: 看样例一: 4 1 3 3 4 我们用多项式系数表示得到一个与aia_iai​有关的多项式:010210\ 1\ 0\ 2\ 10 1 0 2 1, ...

  8. HDU 4609 3idiots

    第一道FFT,研究了kuangbin神的版子,发现想不太通,不过基本的意思都懂了,就是用一个数组的权和另一个数组的权求和,计算个数.题目中有不少坑点. #include <cstdio> ...

  9. 多项式乘法 FFT模板

    题目传送门 在下只是来存个板子,,(板子还是洛谷找的2333) 证明的话,太(wo)难(bu)写(hui),就先留个坑吧,,, NOIP后,如果没退役,我会回来填坑的,, #include<bi ...

最新文章

  1. 曼哈顿距离,欧式距离,明式距离,切比雪夫距离,汉明距离
  2. 初学python还是swift-iOS 将来 Swift 也许会取代 Python
  3. 第四范式陈雨强获评首届世界人工智能大会云帆奖 | 2020WAIC
  4. 一周内自动登录php,利用php实现一周之内自动登录存储机制(cookie、session、localStorage)...
  5. c语言延时函数_SystemVerilog函数和任务
  6. 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。
  7. 碰撞与鲜血:人类与自动驾驶的坎坷摩擦
  8. 使用jQuery插件filtrify实现的超酷动态标签分类摩托车新款展示
  9. elasticsearch-jdbc下载安装
  10. qstring如何初始化_qstringlist 初始化
  11. 偏倚方差分解——R code
  12. 虚拟现实计算机理论文献,虚拟现实在计算机教学中的应用研究
  13. oracle+rac+ogg部署,RAC环境下配置OGG同步
  14. GIS学习(一):密度分析、可达性分析、空间句法
  15. 传奇手游服务器搭建_传奇私服服务器端在云服务器架设,全版本通用的传奇游戏架设教程...
  16. Java回炉之File
  17. IIS6.0+Tomcat整合(java,C++等教程免费下载)
  18. Win10系统通用串行总线(USB驱动损坏)的一种解决方法
  19. zabbix系列:解决zabbix模板不能重复链接到其它模板, 即使透过其它模板
  20. 单片机复习知识点总结

热门文章

  1. Div+CSS布局入门教程(四) 页面顶部制作之二
  2. 《scikit-learn》数据预处理与特征工程(二)数值转换
  3. 吴恩达深度学习 —— 3.6 激活函数
  4. leetcode - 1155. 掷骰子的N种方法
  5. CSS基础必备知识点04
  6. Pytorch 之autograd
  7. VS2013+OpenCV3.0编译CMT跟踪算法
  8. 数据可视化系列(二):艺术画笔见乾坤
  9. pytorch自动求梯度—详解
  10. Apache Shiro入门