首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
bzoj3513
】的更多相关文章
[bzoj3513][MUTC2013]idiots_FFT
idiots bzoj-3513 MUTC-2013 题目大意:给定$n$根木棍,问随机选择三根能构成三角形的概率. 注释:$1\le n\le 3\cdot 10^5$,$1\le a_i\le 10^5$. 想法: 考虑暴力:枚举三条边.复杂度$O(n^3)$. 优化一下发现第三条边可以二分.复杂度$O(n^2logn)$. 正解: 设$g_i$表示选取两根长度为$i$的方案数. 直接用$g$统计不合法情况即可. 发现$g$可以用桶自卷积完成,而这个过程可以用$FFT$优化. Code: #…
BZOJ3513: [MUTC2013]idiots
Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数.接下来若干行描述T组数据,每组数据第一行是n,接下来一行有n个数表示a_i. Output T行,每行一个整数,四舍五入保留7位小数. Sample Input 2 4 1 3 3 4 4 2 3 3 4 Sample Output 0.5000000 1.0000000 HINT T<=20 N<=100000 Source By sbu…
BZOJ3513[MUTC2013]idiots——FFT+生成函数
题目描述 给定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…
bzoj千题计划168:bzoj3513: [MUTC2013]idiots
http://www.lydsy.com/JudgeOnline/problem.php?id=3513 组成三角形的条件:a+b>c 其中,a<c,b<c 若已知 两条线段之和=i 的方案数g[i] 线段长度>i的 线段数量 t[i] 答案是否可以表示为 Σ g[i]*t[i] ? 不能,因为 有c是最大的数的限制 去掉c是最大数的限制: 不能组成三角形的条件:a+b<=c 其中,a<c,b<c 在这里,满足条件的c一定是abc中最大的 所以解题思路是 求出不能…
2019.01.02 bzoj3513: [MUTC2013]idiots(fft)
传送门 fftfftfft经典题. 题意简述:给定nnn个长度分别为aia_iai的木棒,问随机选择3个木棒能够拼成三角形的概率. 思路:考虑对于木棒构造出生成函数然后可以fftfftfft出两个木棒能够生成的边长和的生成函数 注意去重 我们还可以在读入的时候顺便统计出cnticnt_icnti表示长度≤i\le i≤i的木棒有多少根. 然后可以算出选出3个木棒不能拼成三角形的方案数,简单容斥一下再算出总选法数即可. 代码: #include<bits/stdc++.h> #define…
[MUTC2013][bzoj3513] idiots [FFT]
题面 传送门 思路 首先有一个容斥原理的结论:可以组成三角形的三元组数量=所有三元组-不能组成三角形的三元组 也就是说我们只要求出所有不能组成三角形的三元组即可 我们考虑三元组(a,b,c),a<=b<=c,其不能组成三元组的条件是a+b<=c 然后,这道题中并没有顺序限制 于是我们考虑用sum[i]表示长度为i的木棍的个数 将sum[i]为$x^i$的系数的多项式自乘,得到一个2*n项的多项式 那么新多项式(设为S)的第i项系数S[i]就代表着选择总和为i的两条边的方法数量 注意这个S…
bzoj3513
给定n个长度分别为$a_i$的木棒,问随机选择3个木棒能够拼成三角形的概率. $a_i$和$n$都在$10^5$以内 对于每一个i,我们统计比i短的边有多少组合能组成长度<=i的 用1减去这个概率就是能拼成的概率 具体就是用sum[i]表示i出现的次数 sum[i]可以转化成如下卷积的样子 $$sum[i] = \sum_{j=1}^{i-1}sum[j] * sum[i - j - 1]$$ 然后FFT #include<bits/stdc++.h> #define LL long l…
【bzoj3513】[MUTC2013]idiots FFT
题目描述 给定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…
多项式相关&&生成函数相关&&一些题目(updating...)
文章目录 多项式的运算 多项式的加减法,数乘 多项式乘法 多项式求逆 多项式求导 多项式积分 多项式取对 多项式取exp 多项式开方 多项式的除法/取模 分治FFT 生成函数 相关题目 多项式的运算 多项式的加减法,数乘 这个大家应该都会吧 不推了. 直接上代码: friend inline poly operator+(const poly&a,const poly&b){ poly ret(max(a.deg(),b.deg())); for(ri i=0;i<=a.deg();…
各种注意事项(还有c++的一些操作)
转c++时间: 2017年8月9号 1.记得打头文件 2.=与==的区别(赋值|比较) 3.各种运算符的比较级(与Pascal不同),主要是==与位运算 *4.在OJ上scanf和printf时间优于cin.cout,但是在c++上差不多 5.用define定义max和min会更快 这样写: #define min(x,y) (x<y?x:y) #define max(x,y) (x>y?x:y) 其实用define定义大多数东西都要更快(比如lowbit) 如图 *6.c++一般爆变量范围和…