[HDU4609] 3-idiots FFT+计数】的更多相关文章

bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b<=c\)的个数 f[i]是i出现的个数 g[i]表示a+b=i的个数,a<=b 这个可以fft加速到\(nlogn\)统计. 具体的,fft算出ff的卷积,减去自己自己的贡献,然后/2就是了g[i]. 不合法方案数就是:\(\sum f[i]*g[i]\) 最终答案是\(ans=\frac{C_n^3…
用FFT再去重计算出两条边加起来为某个值得方案数,然后用总方案数减去不合法方案数即可. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<string> #include<iomanip> #include<algorithm>…
3-idiots Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6343    Accepted Submission(s): 2216 Problem Description King OMeGa catched three men who had been streaking in the street. Looking as 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个长度分别为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…
题外话:好久没写blog了啊-- 题目传送门 题目大意:给你m条长度为ai的线段,求在其中任选三条出来,能构成三角形的概率.即求在这n条线段中找出三条线段所能拼出的三角形数量除以$\binom{m}{3}$. 假设我们手中有3条长度分别为$x,y,z$的边(为了简化问题我们假设$x<y<z$,$x,y,z$相等的情况另行讨论),如果他们能拼成三角形,必然满足$x+y>z$且$z-y<x$. 该题的$O(m^3)$做法:枚举其中的3条边,套用上面的判断公式,进行累计. 但通过简单的变…
题面 传送门 思路 首先有一个容斥原理的结论:可以组成三角形的三元组数量=所有三元组-不能组成三角形的三元组 也就是说我们只要求出所有不能组成三角形的三元组即可 我们考虑三元组(a,b,c),a<=b<=c,其不能组成三元组的条件是a+b<=c 然后,这道题中并没有顺序限制 于是我们考虑用sum[i]表示长度为i的木棍的个数 将sum[i]为$x^i$的系数的多项式自乘,得到一个2*n项的多项式 那么新多项式(设为S)的第i项系数S[i]就代表着选择总和为i的两条边的方法数量 注意这个S…
如果只有行和列的覆盖,那么可以直接做,但现在有左上到右下的覆盖. 考虑对行和列的覆盖情况做一个卷积,然后就有了x+y的非覆盖格子数. 然后用骑士的左上到右下的覆盖特判掉那些x+y的格子就可以了. 注意题意,Row是从上到下来的,被坑得好惨. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctim…
题目描述 给定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 题解 FFT 考虑什么样的3根木棍不能构成三角形:最长边大于等于其余两边之和. 因为长度只有$1…
一.知识目录 字符串处理 ................................................................. 3 1.KMP 算法 ............................................................ 3 2.扩展 KMP ............................................................ 6 3.Manacher 最长回文子串 .......…
(不妨将下标改为从1开始) 参考loj2265中关于杨表的相关知识 构造一个$n$行且第$i$行有$a_{i}$个格子的杨表,依次记录其每一次增加的时间(范围为$[1,\sum_{i=1}^{n}a_{i}]$) 不难发现,条件即变为要求得到的杨表为标准杨表 另一方面,每一个标准杨表都对应一组方案,因此合法方案数即为$f_{a}$ 关于$f_{a}$的计算,根据性质3.2,即有$f_{a}=\frac{(\sum_{i=1}^{n}a_{i})!}{\prod_{1\le i\le n,1\le…
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}…
题目:给一个数组a,从里面任选三个数,求以这三个数为三条边能构成三角形的概率. 思路:由于每个数只能用一次,所以考虑枚举三边中的最大边.先将a数组排序,然后枚举它的每个数x作为最大边,那么问题就是要求在数组a剩余的数里面“找小于等于x”且“和大于x”的数对个数,答案显然不能直接得到.不妨先计算这样一个数组ans[i]:表示在数组a里面有放回的选两个数,和为i的数对个数.设cnt[i]为i这个数在a数组里面出现的次数,那么ans相当于cnt对cnt的卷积结果, 这可以利用FFT在nlogn的时间内…
关于这道题请移步kuangbin爷的blog:http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html 感觉我一辈子也不能写出这么详细的题解. Code: /*================================= # Created time: 2016-04-18 16:03 # Filename: hdu4609.cpp # Description: =============================…
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4609 Description King OMeGa catched three men who had been streaking in the street. Looking as idiots though, the three men insisted that it was a kind of performance art, and begged the king to fre…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:n个数,问取三个数可以构成三角形的组合数. FFT预处理出两个数的组合情况,然后枚举第三个数,计数去重. #include <bits/stdc++.h> using namespace std; const double PI = acos(-1.0); //复数结构体 typedef struct Complex { double r,i; Complex(double _r =…
有标号DAG计数 题目在COGS上 [HZOI 2015]有标号的DAG计数 I [HZOI 2015] 有标号的DAG计数 II [HZOI 2015]有标号的DAG计数 III I 求n个点的DAG(可以不连通)的个数.\(n \le 5000\) 2013年王迪的论文很详细了 感觉想法很神,自己怎么想到啊? 首先要注意到DAG中一类特殊的点:入度为0的点.以这些点来分类统计 先是一种\(O(N^3)\)的dp, \(d(i,j)\) i个点j个入度为0,转移枚举去掉j个后入度为0点的个数,…
4555: [Tjoi2016&Heoi2016]求和 题意:求\[ \sum_{i=0}^n \sum_{j=0}^i S(i,j)\cdot 2^j\cdot j! \\ S是第二类斯特林数 \] 首先你要把这个组合计数肝出来,于是我去翻了一波<组合数学> 用斯特林数容斥原理推导那个式子可以直接出卷积形式,见下一篇,本篇是分治fft做法 组合计数 斯特林数 \(S(n,i)\)表示将n个不同元素划分成i个相同集合非空的方案数 Bell数 \(B(n)=\sum\limits_{i=…
4555: [Tjoi2016&Heoi2016]求和 题意:求\[ \sum_{i=0}^n \sum_{j=0}^i S(i,j)\cdot 2^j\cdot j! \\ S是第二类斯特林数 \] 首先你要把这个组合计数肝出来,于是我去翻了一波<组合数学> 分治fft做法见上一篇,本篇是容斥原理+fft做法 组合计数 斯特林数 \(S(n,i)\)表示将n个不同元素划分成i个相同集合非空的方案数 考虑集合不相同情况\(S'(n,i)=S(n,i)*i!\),我们用容斥原理推♂倒她…
题解 分治FFT 设\(f_i\)为\(i\)个点组成的无向图个数,\(g_i\)为\(i\)个点组成的无向连通图个数 经过简单的推导(枚举\(1\)所在的连通块大小),有: \[ f_i=2^{\frac{i(i-1)}{2}} \] \[ \begin{align} g_i&=f_i-\sum_{j=1}^{i-1}\binom{n-1}{j-1}g_jf_{i-j}\\ &=f_i-(i-1)!\sum_{j=1}^{i-1}\frac{g_j}{(j-1)!}\frac{f_{i-…
HDU-4609(FFT/NTT) 题意: 给出n个木棒,现从中不重复地选出3根来,求能拼出三角形的概率. 计算合法概率容易出现重复,所以建议计算不合法方案数 枚举选出的最大边是哪条,然后考虑剩下两条边之和小于等于它 两条边之和为\(x\)的方案数可以\(FFT/NTT\)得到,是一个简单的构造 即\(f(x)=\sum x^{length_i}\),求出\(f(x)^2\),就能得到和的方案数,但是会重复,包括自己和自己算,一对算两次 处理一下前缀和即可 #include<bits/stdc+…
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…
原文链接www.cnblogs.com/zhouzhendong/p/UOJ335.html 前言 CLY大爷随手切这种题. 日常被CLY吊打系列. 题解 首先从 pruffer 编码的角度考虑这个问题. pruffer 编码的长度为 $n-2$ ,如果点 $i$ 在 pruffer 编码中出现了 $d_i - 1$ 次,那么点 $i$ 的度数就是 $d_i$ ,对答案的贡献次数就是 $\binom {n-2}{d_i}a_i ^ {d_i}$ . 于是自然想到用 EGF 做这个题.设 $$f_…
CTT=清华集训 题目大意 有\(n\)个点,点权为\(a_i\),你要连接一条边,使该图变成一颗树. 对于一种连边方案\(T\),设第\(i\)个点的度数为\(d_i\),那么这棵树的价值为: \[ val(T)=(\prod_{i=1}^na_i^{d_i}d_i^m)(\sum_{i=1}^nd_i^m) \] 求所有生成树的价值和\(\bmod 998244353\) \(n\leq 30000,m\leq 30\) 题解 很容易想到prufer序列 先把式子化简: \[ \begin{…
题目大意: 给出n(1e5)条线段(长度为整数,<=1e5),求任取3条线段能组成一个三角形的概率. 用cnt[i]记录长度为i的线段的个数,通过卷积可以计算出两条线段长度之和为i的方案数sum[i]:先用FFT计算出cnt[i]的卷积sum[i],为取两条线段长度和为i的排列数(包括自己和自己),去掉自己和自己的方案数,再对所有sum[i]除以2即为所求方案数. 之后对所有线段a[i]有大到小排列,考虑第i条线段是三角形最长边的情况(长度相同则将编号大的视为更长,就没有长度相同的情况了.实际计…
有标号的DAG计数系列 有标号的DAG计数I 题意 给定一正整数\(n\),对\(n\)个点有标号的有向无环图(可以不连通)进行计数,输出答案\(mod \ 10007\)的结果.\(n\le 5000\) 题解 显然是\(O(n^2)\)来做. 设\(f(i)\)表示\(i\)个点有标号的有向无环图的个数.而\(DAG\)中的特殊点显然只有两种,要么是出度为\(0\),要么入度为\(0\).随便枚举哪一种都行,这里枚举入度为\(0\)的点. 那么得到式子: \[f(n)=\sum_{i=1}^…
http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:1e5个数,求取三个数能形成三角形的概率. 题解(这怎么会是fft入门题QAQ): 概率的算法就是三角形取法/总取法.总取法就是C(n,3). 三角形取法如何计算? part1:构造母函数F(日常套路),每一项的次数为长度,系数为该长度的木棍数量,用FFT算F^2 , 得到的多项式就包含了任意取两跟棍子得到的所有长度的方案数:其中次数为两根棍长之和,系数为该长度的方案数, part2:去重,考虑p…
传送门 fftfftfft经典题. 题意简述:给定nnn个长度分别为aia_iai​的木棒,问随机选择3个木棒能够拼成三角形的概率. 思路:考虑对于木棒构造出生成函数然后可以fftfftfft出两个木棒能够生成的边长和的生成函数 注意去重 我们还可以在读入的时候顺便统计出cnticnt_icnti​表示长度≤i\le i≤i的木棒有多少根. 然后可以算出选出3个木棒不能拼成三角形的方案数,简单容斥一下再算出总选法数即可. 代码: #include<bits/stdc++.h> #define…
Description Input Output Sample Input Sample Output Solution 题意:给你$n$根木棍,问你任选三根能构成三角形的概率是多少. 写挂sb细节心态崩了 首先把读入的长度$a$数组开个桶$c$存下来,然后卷积一下$c$数组.可以发现卷完后的数组$c$就是“任选两根木棍(可以重复选)长度和为$c[i]$的方案数.” 因为有可能自己和自己算到一起,所以$c[a[i]*2]--$.因为$i+j$,$j+i$是一种,所以要$c[i]=c[i]/2$.…
link 巨佬olinr的题解 <-- olinr很强 考虑生成函数 考虑直径上点数>=4的毛毛虫的直径,考虑直径中间那些节点以及他上面挂的那些点的EGF \(A(x)=\sum_{i\ge 1}\frac{ix^i}{i!}\) 考虑和直径两端点相连的节点,我们强制让他挂至少一个点(否则他就成了直径端点就重复了),EGF \(B(x)=\sum_{i\ge 2}\frac{ix^i}{i!}\) 最后答案生成函数就是 \(Ans(x)=B(x)*\frac{1}{1-A(x)}*B(x)\)…