HDU-4609(FFT/NTT)】的更多相关文章

http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给你n个数,问任意取三边能够,构成三角形的概率为多少. 思路:使用FFT对所有长度的个数进行卷积(\(C = \{x + y| x \in A, y \in B \} \)),得到所有两边和情况数,再考虑去掉重复的情况.找边并计数的时候再去掉不可能的情况.具体操作看bin神的博客    另FFT还可以用来进行多项式和高精度乘法,又难懂又难用的东西=x= /** @Date : 2016-12-04…
题意:给出一堆数,问从这些数中取3个能组成三角形的概率? sol:其实就是问从这些数里取3个组成三角形有多少种取法 脑洞大开的解法:用FFT 设一开始的数是1 3 3 4 作一个向量x,其中x[i]=边长为i的边的个数 那么就有x=[0 1 0 2 1 0 0 0 0] 令y=x,对x和y作DFT,得到dx和dy.令dn=dx*dy,再对dn作IDFT得到n 那么就得到n=[0 0 1 0 4 2 4 4 1 0 ] 其中n[i]=在x和y中各选一条边,使得两条边之和为i有几种方案 这时得到的n…
3-idiots Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7804    Accepted Submission(s): 2724 Problem Description King OMeGa catched three men who had been streaking in the street. Looking as i…
思路: http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html 其实我是懒得写了.... 一定要define int long long--(否则不知道自己怎么死的别怪我..) 有用C++写好的虚数 的版本 (是慢一些) (写完本地编译过了 交上去各种CE) 哦 还有.. 不要每回都搞1<<18个初始量,,,,,,, 会T到死的 QAQ 100组数据 .. 每回找最大值就好啦 //By SiriusRen #include…
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 FFT  不会 找了个模板 代码: #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; typedef long long ll; typedef pair<double…
快速傅里叶变化有不同的应用场景,hdu4609就比较有意思.题目要求是给n个线段,随机从中选取三个,组成三角形的概率. 初始实在没发现这个怎么和FFT联系起来,后来看了下别人的题解才突然想起来:组合计数问题可以用多项式的卷积来解决.于是将给的数据进行卷积相乘,利用FFT即可求出三角形任意两条线段组合的可能数目. 然后遍历初始数据,将其作为最长边(这里一开始也没想明白,其实就是只要最长边大于短边之和,其他两个不等式也自然可以满足).那么理论上说比它长的所有两边组合可能都可以.当然在这里要考虑三种特…
第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了--赛场上看出来是个单位根反演但不会,所以只好现学这东西了( 首先你得知道单位根是什么东西,对于 \(n\) 次方程 \(x^n-1=0(x\in\mathbb{C})\),在复数域上有 \(n\) 个根,其对应到复平面上就是单位圆的 \(n\) 等分点,我们将这些单位根从 \(x\) 轴正半轴开始顺时针依次…
前言.FFT  NTT 算法 网上有很多,这里不再赘述. 模板见我的代码库: FFT:戳我 NTT:戳我 正经向:FFT题目解题思路 \(FFT\)这个玩意不可能直接裸考的..... 其实一般\(FFT\)的题目难点不在于\(FFT\),而在于构造多项式与卷积. 两个经典例题: [ZJOI2014]力 给定序列\(\{ q[1],q[2],....q[n]\}\) 定义:\(Ej = \sum_{i<j} \frac{q[i]}{(i-j)^2} - \sum_{i>j} \frac{q[i]…
Shell Necklace Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 647    Accepted Submission(s): 287 Problem Description Perhaps the sea‘s definition of a shell is the pearl. However, in my view,…
XM Reserves Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Submission(s): 99    Accepted Submission(s): 45 Problem Description As an eligible Ingress Resistance Agent you should know your power source, th…
目录 信号, 集合, 多项式, 以及卷积性变换 卷积 卷积性变换 傅里叶变换与信号 引入: 信号分析 变换的基础: 复数 傅里叶变换 离散傅里叶变换 FFT 与多项式 \(n\) 次单位复根 消去引理, 折半引理与求和引理 重新定义 多项式的表示 快速傅里叶变换FFT 通过 FFT 在单位复数根处插值 FFT的速度优化与迭代实现 炸精现场与 NTT 原根 NTT 任意模数 NTT 卷积状物体与分治 FFT FWT 与位运算卷积 FWT 与 \(\text{or}\) 卷积 FWT 与 \(\te…
FFT/NTT/MTT Tags:数学 作业部落 评论地址 前言 这是网上的优秀博客 并不建议初学者看我的博客,因为我也不是很了解FFT的具体原理 一.概述 两个多项式相乘,不用\(N^2\),通过\(FFT\)可以把复杂度优化到\(O(NlogN)\),\(NTT\)能够取模,\(MTT\)可以对非\(NTT\)模数取模,相对来说\(FFT\)常数小些因为不要取模 二.我们来背板子(FFT) 先放一个板子(洛谷P3803 [模板]多项式乘法(FFT)) #include<iostream>…
FFT&NTT总结 一些概念 \(DFT:\)离散傅里叶变换\(\rightarrow O(n^2)\)计算多项式卷积 \(FFT:\)快速傅里叶变换\(\rightarrow O(nlogn)\)计算多项式卷积 \(NTT:\)快速数论变换\(\rightarrow\)对\(FFT\)的常数优化 \(MTT:\)\(NTT\)的一些拓展 FFT 多项式&卷积 设\(A(x)\)表示一个\(n-1\)次多项式 则\(A(x)=\sum_{i=0}^{n-1}a_ix^i\) 而卷积就是两个…
$A * B$ FFT模板题,找到了一个看起来很清爽的模板 /** @Date : 2017-09-19 22:12:08 * @FileName: HDU 1402 FFT 大整数乘法.cpp * @Platform: Windows * @Author : Lweleth (SoungEarlf@gmail.com) * @Link : https://github.com/ * @Version : $Id$ */ #include <bits/stdc++.h> #define LL…
@(学习笔记)[FFT, NTT] 问题概述 给出两个次数为\(n\)的多项式\(A\)和\(B\), 要求在\(O(n \log n)\)内求出它们的卷积, 即对于结果\(C\)的每一项, 都有\[c_i = \sum_{j = 0}^{n}a_j \cdot b_{i - j}\] 问题求解 大致思路 朴素做法: 考虑按照上面的式子暴力运算, 时间复杂度: \(O(n^2)\) 考虑把多项式化作点值表达, 记\[A(x) =\sum_{i = 0}^n a_i x^i\] 我们把\(A\)和…
@(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to end of file. Note: the length of each integer will not exceed 50000. Output For each case, output A * B in one line. Sample Input 1 2…
在学各种数各种反演之前把以前做的$FFT$/$NTT$的题整理一遍 还请数论$dalao$口下留情 T1快速傅立叶之二 题目中要求求出 $c_k=\sum\limits_{i=k}^{n-1}a_i*b_{i-k}$ 首先可以把$a$翻转, $c_k=\sum\limits_{i=k}^{n-1}a_{n-1-i}*b_{i-k}$ $c_k=\sum\limits_{i=0}^{n-k-1}a_{n-k-1-i}*b_{i}$ T2力 $f[i]=\sum_{j=1}^{i-1}\frac{q…
打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <algorithm> #define rin(i,a,b)…
FFT和NTT真是噩梦呢 既然被FFT和NTT坑够了,坑一下其他的人也未尝不可呢 前置知识 多项式基础知识 矩阵基础知识(之后会一直用矩阵表达) FFT:复数基础知识 NTT:模运算基础知识 单位根介绍 设有一个数a,使得an=1,其中n为满足an=1的最小正整数 满足条件的a有哪些呢? 复数域上的(cos(2π/n)+sin(2π/n)*i)(一般用ωn表示) 模运算中的原根g(mod n+1) 更宽泛地说,只要在一个集合中定义了加法和乘法,而且二者满足: 存在元素“0”,使得加上“0”的结果…
HDU-4609(FFT/NTT) 题意: 给出n个木棒,现从中不重复地选出3根来,求能拼出三角形的概率. 计算合法概率容易出现重复,所以建议计算不合法方案数 枚举选出的最大边是哪条,然后考虑剩下两条边之和小于等于它 两条边之和为\(x\)的方案数可以\(FFT/NTT\)得到,是一个简单的构造 即\(f(x)=\sum x^{length_i}\),求出\(f(x)^2\),就能得到和的方案数,但是会重复,包括自己和自己算,一对算两次 处理一下前缀和即可 #include<bits/stdc+…
FFT NTT错误总结 1 处理\(r\)数组时忘记赋值 r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1)); 2 负数重载运算符 point operator * (point a,point b){ return point(a.x * b.x - a.y * b.y,a.x * b.y + a.y * b.x); } 3 欧拉公式记不清楚 point Wn = point(cos(Pi / mid),type *…
众所周知,tzc 在 2019 年(12 月 31 日)就第一次开始接触多项式相关算法,可到 2021 年(1 月 1 日)才开始写这篇 blog. 感觉自己开了个大坑( 多项式 多项式乘法 好吧这个应该是多项式各种运算中的基础了. 首先,在学习多项式乘法之前,你需要学会: 复数 我们定义虚数单位 \(i\) 为满足 \(x^2=-1\) 的 \(x\). 那么所有的复数都可以表示为 \(z=a+bi\) 的形式,其中 \(a,b\) 均为实数. 复数的加减直接对实部虚部相加减就行了. 复数的乘…
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意: 给定 N 个正整数, 表示 N 条线段的长度, 问任取 3 条, 可以构成三角形的概率为多少~ 数据范围: N<=10^5 ~~ 思路:设三边分别为 x, y, z (x<=y<=z) 枚举 z ,统计 x+y 大于 z 的数目 . 比赛时能想到的只有 O(n^2) 的算法,无力 AC~ 赛后才知道有种东西叫 FFT ~ 以下为官方解题报告: /* 记录 A_i 为长度为 i 的…
题目链接: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的选择方案的种数. 但是这里有重复的: (…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4609 答案就是随便选三条边的方案 - 不合法的方案. 不合法的方案就是算出 x+y = k 的方案数 g[ k ],对于每个长度 z ,不合法方案+=\( \sum\limits_{k=0}^{z}g[k] \) 注意 FFT 之后偶数项 k 算上了取长度为 k/2 的同一条边两遍的方案,要去重. 随便选三条边的 n*(n-1)*(n-2) 会把同一个 x , y , z 算6遍,而枚举 z 会把同一个…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4609 算不合法的比较方便: 枚举最大的边,每种情况算了2次,而全排列算了6次,所以还要乘3: 注意枚举最大边的范围是 mx 而不是 lim !!否则会超过开的数组范围!!! 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath…
比较裸的FFT(快速傅里叶变换),也是为了这道题而去学的,厚的白书上有简单提到,不过还是推荐看算法导论,讲的很详细. 代码的话是照着别人敲的,推荐:http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html写的很详细. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace…
一点吐槽:我看网上很多分析,都是在分析这个题的时候,讲了半天的FFT,其实我感觉更多的把FFT当工具用就好了 分析:这个题如果数据小,统计两个相加为 x 的个数这一步骤(这个步骤其实就是求卷积啊),完全可以母函数,无奈数据很大,就用FFT了 然后难点在于最后的统计,要减去自身,两个都大的,一大一小,包含自身,这是用到了容斥,再做相似的题的时候,应该多看看这方面 注:再次高度仰慕kuangbin神,这是我FFT的第二题,也是第二次用kuangbin FFT模板 #include <stdio.h>…
3-idiots Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3560    Accepted Submission(s): 1241 Problem Description King OMeGa catched three men who had been streaking in the street. Looking as i…