hdu 4609 3-idiots [fft 生成函数 计数]】的更多相关文章

hdu 4609 3-idiots 题意: 给出\(A_i\),问随机选择一个三元子集,选择的数字构成三角形的三边长的概率. 一开始一直想直接做.... 先生成函数求选两个的方案(注意要减去两次选择同一个的,然后/2),然后统计三角形个数. 枚举三角形最长边,求\(i+j>k,i<k,j<k\)的方案数.后两个条件减去不合法的. 不合法很好统计 \(i \ge k \rightarrow i+j > k\) #include <iostream> #include &l…
题目链接: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的选择方案的种数. 但是这里有重复的: (…
[MUTC2013]idiots Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 806  Solved: 265[Submit][Status][Discuss] Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是n,接下来一行有n个数表示a_i. 3≤N≤10^5,1≤a_i≤10^5 Output T…
题目链接 题意:从N个数中,选出三个两两不同的数,求这三个数能够作为一个三角形的三边长的概率. 题解:用一个数组num[]记录大小为 i 的数出现的次数,通过 num[] 卷 num[] 得到 num2[],用 num2[i] 表示从N个数中选两个数,这两个数的和为 i 的情况数.然后考虑对三角形的计数,正向不易得到ans,可以考虑三个数不能构成三角形的情况数,那么可以对所有的非法情况根据其中最大一个数来进行分类.最后总的情况数 sum=sigma{ a[i]*presum_num2[i] }…
题意:给定 n 条边,问随机选出 3 条边,能组成三角形的概率是多少. 析:答案很明显就是  能组成三角形的种数 / (C(n, 3)).现在的问题是怎么求能组成三角形的种数. 这个博客说的非常清楚了... https://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html 总体来说就是把边长转换成下标,然后再根据组合数,就可以知道选出两条边,长度为 i 有多少种情况,然后再减去重复的,最后再枚举斜边,就可以解决这个问题了. 代码如下…
题目描述 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. 输入 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是n,接下来一行有n个数表示a_i. 3≤N≤10^5,1≤a_i≤10^5 输出 T行,每行一个整数,四舍五入保留7位小数. 样例输入 2 4 1 3 3 4 4 2 3 3 4 样例输出 0.5000000 1.0000000 提示 T<=20 N<=100000 首先开一个桶就可以得到长度分别为[1,100000…
这是我接触的第一个关于FFT的题目,留个模板. 这题的题解见:http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html. FFT的模板如下: #include<bits/stdc++.h> using namespace std; ; struct Complex { double x,y; Complex(,) :x(_x),y(_y) {} Complex operator + (Complex &tt) { r…
题面 要求组合的方法显然我们需要对桶卷积,即设$F(x)=\sum\limits_{i=1}^{maxx}x^{cnt[i]}$,然后我们初步的先把$F^2(x)$卷出来,表示选两条边.然后我们发现如果用“两边之和大于第三边”来求,那么小于这两条边的可能不是最长的,所以应该枚举大于这两条边的来容斥 注意题目中提到了不能选重复的,所以对于所有指数为偶数的项去重,还有题目要求是无序地选 #include<cmath> #include<cstdio> #include<cstri…
HDU4609 FFT+组合计数 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意: 找出n根木棍中取出三根木棍可以组成三角形的概率 题解: 我们统计每种长度的棍子的个数 我们对于长度就有一个多项式 \[ f=num[0]*i_0+num[1]*i_1+num[2]*i_2.....num[len]*i_len \] 我们考虑两根棍子可以组成所有长度的方案数 所以我们对num数组求一次FFT 两根棍子组成长度的上界是\(len_{max}…
快速傅里叶变化有不同的应用场景,hdu4609就比较有意思.题目要求是给n个线段,随机从中选取三个,组成三角形的概率. 初始实在没发现这个怎么和FFT联系起来,后来看了下别人的题解才突然想起来:组合计数问题可以用多项式的卷积来解决.于是将给的数据进行卷积相乘,利用FFT即可求出三角形任意两条线段组合的可能数目. 然后遍历初始数据,将其作为最长边(这里一开始也没想明白,其实就是只要最长边大于短边之和,其他两个不等式也自然可以满足).那么理论上说比它长的所有两边组合可能都可以.当然在这里要考虑三种特…