3771: Triple】的更多相关文章

3771: Triple Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 547  Solved: 307 Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是啊!” 水神又把手上的东西扔在一边,拿…
3771: Triple 链接 题意 n个斧头,每个斧头的价值都不同(开始时没注意到),可以取1个,2个,3个斧头组成不同的价值,求每种价值有多少种组成方案(顺序不同算一种) 分析: 生成函数 + 容斥原理 + FFT. 首先对于只取一个的话,那么生成函数就是$A = (x^0 + x^{w_1} + x^{w_2} + x^{w_3}+...+x^{w_n})$(指数为价值,系数为方案数) 那么朴素的求解就是$ans = A+A^2+A^3$ 但是顺序不同算一种,所以每一项都除以n!,$ans…
[BZOJ 3771] Triple(FFT+生成函数) 题面 给出 n个物品,价值为别为\(w_i\)且各不相同,现在可以取1个.2个或3个,问每种价值和有几种情况? 分析 这种计数问题容易想到生成函数. 设生成函数\(A(x)=\sum_{i=1}^{n} x^{w_i}\),指数为价值,系数为选的方案数.A表示每种物品取1个的方案数.同理,我们可以写出每种物品取2个和3个的生成函数. \(B(x)=\sum_{i=1}^{n} x^{2w_i}\) \(C(x)=\sum_{i=1}^{n…
Description 问所有三/二/一元组可能形成的组合. Sol FFT. 利用生成函数直接FFT一下,然后就是计算,计算的时候简单的容斥一下. 任意三个-3*两个相同的+2*全部相同的+任意两个-两个相同的+任意一个. Code /************************************************************** Problem: 3771 User: BeiYu Language: C++ Result: Accepted Time:1760 m…
http://www.lydsy.com/JudgeOnline/problem.php?id=3771 题意:n个带价值互不相同的物品,每次可以取1.2.3个物品,问能得到的所有的价值和这个价值的方案数(n不明(无意义= =),价值<=40000) #include <bits/stdc++.h> using namespace std; const int N=200005; int bit[N]; const double PI=acos(-1); struct cp { doub…
Triple Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 847  Solved: 482[Submit][Status][Discuss] Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 把方案作为系数.值作为指数,两项相乘就是系数相乘.指数相加,符合意义. 考虑去重.先自己卷积自己3次(就是求出点值表达式后a[ i ]=a[ i ]*a[ i ]*a[ i ],因为卷积3次就是点值的3次方,然后iDFT回去即可),这是无限制的然后把至少两个斧头相同的方案减去:刚才求的方案其实是有序的,所以两个斧头相同的话,第三个斧头有3个位置,要减去的是 a^2 * a 的3倍(a…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 令多项式的系数是方案数,次数是值: 设 a(x) 为一个物品的多项式,即 a[w[i]].x = 1,b(x) 为两个物品重复的多项式,即 b[w[i]*2].x = 1,c(x) 为三个物品重复的多项式,即 c[w[i]*3].x = 1: 选恰好三个有序物品的答案就是 a(x)^3 - 3*a(x)*b(x)^2 + c(x),因为要无序,所以再除以 3! = 6: 选恰好两个有…
题意:n个物品,可以用1/2/3个不同的物品组成不同的价值,求每种价值有多少种方案(顺序不同算一种) [生成函数]: 构造这么一个多项式函数g(x),使得n次项系数为a[n]. 普通型生成函数用于解决多重集的组合问题 生成函数的x无实际意义 通常可以化为一个简单的式子 组合数的生成函数 A(x)=(1+x)^n  C(n,k)=a[k] 可以这么想,一次要么选择1要么选择x,选择x系数就会+1 生成函数系数为方案数,次数为价值 A(x) 选一个 B(x) A每项平方 选两个 C(x) A每项三次…
解析: 这东西其实就是指数型母函数? 所以刚开始读入的值我们都把它前面的系数置为1. 然后其实就是个多项式乘法了. 最大范围显然是读入的值中的最大值乘三,对于本题的话是12W? 用FFT优化的话,达到了O(nlogn),显然可过. 但是这里有一个问题,就是如何处理重复的部分. 重复的部分我们考虑用容斥原理来解决. 为了方便描述我们不妨设三个多项式. 第一个是仅取一个而构成的多项式.->x 第二个是仅取相同的两个而构成的多项式.->y 第三个是仅取相同的三个而构成的多项式.->z 对于本题…
题目链接 \(Description\) 有\(n\)个物品(斧头),每个物品价值不同且只有一件,问取出一件.两件.三件物品,所有可能得到的价值和及其方案数.\((a,b),(b,a)\)算作一种方案. \(Solution\) 尝试用母函数去表示.\(A\)表示取一个物品对应方案数和价值的母函数,即\[A=x^{v_1}+x^{v_2}+x^{v_3}\ldots\] 那么取两件就是\(A^2\),取三件是\(A^3\).因为是组合,而这么求的是排列,所以\[Ans=A+\frac{A^2}{…
[题意]给定n个物品,价值为$a_i$,物品价格互不相同,求选一个或两个或三个的价值为x的方案数,输出所有存在的x和对应方案数.$ai<=40000$. [算法]生成函数+FFT [题解]要求价值为x的方案数,就定义价值为“大小”(即指数),方案数为“元素个数”(即系数),物品为“选择项”(即多项式). 设$f(x)$表示选择一个物品,价值为x的方案数. 虽然很容易想到$f^3(x)$,但因为不能重复选物品所以必须去重.而且不容易在$f^3(x)$中表示出选一个或两个物品. ①选择一个物品的方案…
Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 911  Solved: 528[Submit][Status][Discuss] Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是啊!” 水神又…
直接暴力卷积+统计就可以了. 去重比较复杂. 其实也不复杂,抄吧! 反正AC了. #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (in…
题目大意: 给出\(n\)个互不相同的物品,每个物品有价值\(x_i(x_i \leq 40000)\)如果可以从中取一个或两个或三个物品.问能够组合出来的所有价值和对应的方案数,全部输出.取值时,\((a,b)\)和\((b,a)\)算作一种 题解: 不要说什没有给\(n\)的范围什么的,题目表明了\(n \leq 40000\) 我们首先想到的是直接取 我们构造出只取一个物品时的母函数 \[A(x) = x + x^2 + x^3 + ...\] 然后我们取两个物品的时候的母函数就可以用乘积…
瞎搞居然1A,真是吃鲸 n的范围只有聪明人能看见--建议读题3遍 首先看计数就想到生成函数,列出多项式A(x),然后分别考虑123 对于选一个的直接计数即可: 对于选两个的,\( A(x)^2 \),然后注意这里两个选一样的是不合法的,各出现了一次,所以减掉,然后这里是有顺序的,所以最后再除以2(就是(1,2)和(2,1)算两次): 对于选三个的,\( A(x)^3 \),然后去掉不合法的,设D(x)为每个斧头选两次的生成函数(也就是价格*2),然后A(x)*D(x)就表示前两个斧头重复选取的方…
题面 Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: "这把斧头,是不是你的?" 樵夫一看:"是啊是啊!" 水神把斧头扔在一边,又拿起一个东西问: "这把斧头,是不是你的?" 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:"是啊是啊!" 水神又把手上的东西扔在一边,拿起第三个东西问: "这把斧头,是不是你的?" 樵夫还是看不…
数学相关一直都好弱啊>_< 窝这个月要补一补数学啦, 先从基础的fft补起吧! 现在做了 道. 窝的fft 模板 (bzoj 2179) #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define MAXN 200005 #define PI M_PI using namespace std…
[2018HN省队集训D8T3] 水果拼盘 题意 给定 \(n\) 个集合, 每个集合包含 \([1,m]\) 中的一些整数, 在这些集合中随机选取 \(k\) 个集合, 求这 \(k\) 个集合的并集的权值的期望. 一个集合的权值定义为, 对于所有 \([1,m]\) 的整数, 若集合中含有 \(i\) 则产生 \(a_i\) 的贡献, 否则产生 \(b_i\) 的贡献. \(n\le 1\times 10^5, m\le 18,k\le 25\) 题解 好像只有我一个写了一些玄学FWT操作.…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 写在前面 一些约定 循环卷积 DFT卷积的本质 Bluestein's Algorithm 例题 分治FFT 例题 FFT的弱常数优化 复杂算式中减少FFT次数 例题 利用循环卷积 小范围暴力 例题 快速幂乘法次数的优化 FFT的强常数优化 DF…
生成函数+FFT Orz PoPoQQQ 这个题要算组合的方案,而且范围特别大……所以我们可以利用生成函数来算 生成函数是一个形式幂级数,普通生成函数可以拿来算多重集组合……好吧我承认以上是在瞎扯→_→ 这个东西我也不记得是多会儿看的了……找本<组合数学>自己看看好了……或者问学数学竞赛的同学&数竞教练 先引用下PoPoQQQ的题解: 首先搞出这n个物品的母函数a 将a的每项的平方求和得到多项式b 将a的每项的立方求和得到多项式c 那么如果不考虑顺序和重复 那么方案数就是a+b+c 现…
Problem Description 给出 \(n\) 个物品,第 \(i\) 个物品体积为 \(a_i\) . 对于每个体积 \(V\) ,求选出 \(3\) 个物品,体积之和为 \(V\) 的方案总数. 选择顺序不同算同一种方案. Range \(n\) 保证不会读入到 \(TLE\) , \(a_i\le 4 \times 10^4\) . Algorithm \(FFT\) ,生成函数. Mentality 设生成函数 \(A(x)\) 为只选择一个物品的生成函数.其中 \([x^m]…
Triple Nim Time Limit: 2000MS Memory limit: 65536K 题目描述 Alice and Bob are always playing all kinds of Nim games and Alice always goes first. Here is the rule of Nim game: There are some distinct heaps of stones. On each turn, two players should remov…
Triple Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Submission(s): 1365    Accepted Submission(s): 549 Problem Description Given many different integers, find out the number of triples (a, b, c) which sat…
poj 3771 http://poj.org/problem?id=3771 wiki Prim http://zh.wikipedia.org/wiki/%E6%99%AE%E6%9E%97%E5%A7%86%E7%AE%97%E6%B3%95 prim 算法水题 之前写过类似的题,一直以为直接暴力,从遍历所有的点为起点,寻找距离起点最短的点然后再在改点上寻找最短距离 这摆明了是划线嘛……根本不是图论啊啊啊!!!! 这样真是萌萌哒…… 正确的做法是先枚举所有的点作为起点,然后把距离长的点更新…
Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 388    Accepted Submission(s): 148 Problem Description Given the finite multi-set A of n pairs of integers, an another finite multi-set B …
C - Triple Flips 思路: 小范围暴力 大范围递归构造 构造方法: solve(l, r) 表示使l 到 r 区间全变为0的方法 为了使反转次数小于等于n/3 + 12 我们只需要保证每次反转后区间长度减少值的期望为3就可以了 如果a[l] == 0, l++ 如果a[r] == 0, r-- 如果a[l] == 1 && a[l+1] == 1 && a[l+2] == 1, 反转这三个就可以啦, l += 3 如果a[l] == 1 &&…
[BZOJ3771]Triple(生成函数,多项式运算) 题面 有\(n\)个价值\(w\)不同的物品 可以任意选择\(1,2,3\)个组合在一起 输出能够组成的所有价值以及方案数. \(n,w<=40000\) 题解 对于每一个出现的价值,就在对应的位置上\(+1\) 于是我们就有了一个生成函数\(A(x)\),代表着出现了一次的价值. 设\(B(x),C(x)\)分别代表着两个物品组成的价值和三个物品组成的价值,我们不难得到以下式子. \[B(x)=A(x)*A(x)-D(x),C(x)=A…
Given a list of N integers A1, A2, A3,...AN, there's a famous problem to count the number of inversions in it. An inversion is defined as a pair of indices i < j such that Ai > Aj. Now we have a new challenging problem. You are supposed to count the…