BZOJ3771:Triple——题解】的更多相关文章

https://www.lydsy.com/JudgeOnline/problem.php?id=3771 大意:给n把不同价值的斧子,从中选一把/两把/三把,所构成的每种价值和的可能情况有多少. 生成函数,指数为价值,系数即为可能情况数. 但是直接FFT乘会有两把/三把斧子拿的同一个的情况. 于是我们多存两个数组,分别记录两把/三把同时拿一把的生成函数,之后就容斥一下就行啦! (注意拿的顺序不同也算是同一种情况,不要忘记除下去) #include<cstdio> #include<cc…
题目链接 BZOJ3771 题解 做水题放松一下 先构造\(A_i\)为\(x\)指数的生成函数\(A(x)\) 再构造\(2A_i\)为指数的生成函数\(B(x)\) 再构造\(3A_i\)为指数的生成函数\(C(x)\) 那么只需计算 \[A(x) + \frac{A^2(x) - B(x)}{2} + \frac{A^{3}(x) - 3(A(x)B(x) - C(x))}{6}\] 那么\(x^i\)的系数即为损失价值\(i\)的方案数 #include<algorithm> #inc…
额我不是来发题解的,只是非常郁闷= =,这题的答案最大是1.2e9/6左右,所以用ntt的话要在模意义下除以6,不能最后除,否则刚好爆掉= = #include<bits/stdc++.h> #define N 131072 using namespace std; const int p=998244353; int up(int s,int t){ return 1ll*s*t%p; } int wop(int u,int k){ for(int s=1;;u=up(u,u)){ if(k…
思路比较直观.设A(x)=Σxai.先把只选一种的统计进去.然后考虑选两种,这个直接A(x)自己卷起来就好了,要去掉选同一种的情况然后除以2.现在得到了选两种的每种权值的方案数,再把这个卷上A(x).得到这个后考虑去重,其中重复的就是选了两个相同的和另外一个,那么再把选两个相同的生成函数搞出来卷上A,减掉选三个相同的.把这个东西减掉之后再除以3.说了半天也不知道在说啥,总之是容斥原理很基础的应用. 有些卡精度,用long double才过,可能是我写丑了. #include<iostream>…
传送门 生成函数经典题. 题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数. 思路: 令A(x),B(x),C(x)A(x),B(x),C(x)A(x),B(x),C(x)表示选111个,222个,333个的生成函数,ans1(x),ans2(x),ans3(x)ans1(x),ans2(x),ans3(x)ans1(x),ans2(x),ans3(x)表示选111个,222个,333个答案的生成函数. 那么ans1(x)=A(x)ans1(x)=…
Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: "这把斧头,是不是你的?" 樵夫一看:"是啊是啊!" 水神把斧头扔在一边,又拿起一个东西问: "这把斧头,是不是你的?" 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:"是啊是啊!" 水神又把手上的东西扔在一边,拿起第三个东西问: "这把斧头,是不是你的?" 樵夫还是看不清楚,…
传送门 咳咳忘了容斥了-- 设\(A(x)\)为斧头的生成函数,其中第\(x^i\)项的系数为价值为\(i\)的斧头个数,那么\(A(x)+A^2(x)+A^3(x)\)就是答案(于是信心满满的打了一发连样例都没过) 如果按上面那样算的话,会有重复的,比如说\(A^2(x)\),会产生诸如\((x_i,x_i)\)之类的同一把斧头的贡献,所以定义\(B(x)\)为同一个斧头重复两次的方案数,那么\(A^2(x)-B(x)\)就是两把斧头时真正的贡献,又因为与顺序无关,所以还要除以\(2\) 然后…
打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <algorithm> #define rin(i,a,b)…
\(\text {FWT}\) 学习笔记 正常项的\(\text {FWT}\) 在\(\text {OI}\)中,我们经常会碰到这种问题: 给出一个长度为\(n\)的序列\(a_{1,2,...,n},b_{1,2,...,n}\),求出 \[c_k=\sum_{i\oplus j=k}a_i b_j \] 其中\(\oplus\)是定义的一种二进制下的运算. 对于这种问题,我们有一种通用的方法,我们称之为\(\text {FWT}\). 我们考虑对于一个\(A\)构造一个\(FWT\)变换序…
[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…