题目传送门 题目大意:给你一个长度为$n$的自然数序列$a$,定义一段区间的权值为这一段区间里所有数的和,分别输出权值为$[0,\sum a_{i}]$的区间的长度之和 想到了生成函数的话,这道题并不难做.但很多细节真是不太好搞 我们首先预处理出前缀和s,那么一段区间$[l,r]$的权值就是$s_{r}-s_{l-1}$ 容易联想到卷积 第一个多项式是 区间右端点的前缀和 作为指数的生成函数,每一项的系数是 右端点的编号之和 第二个多项式是 区间左端点的前缀和 作为指数的生成函数,每一项的系数是…
JRY wants to drag racing along a long road. There are nn sections on the road, the ii-th section has a non-negative integer length sisi. JRY will choose some continuous sections to race (at an unbelievable speed), so there are totally n(n+1)2n(n+1)2 …
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8IAAAPeCAIAAABInTQaAAAgAElEQVR4nOy9fZReVXk3vP8ia+HqCy…
卷积的妙用,显然我们可以求出所有符合条件的右端点的和,然后减去左端点的和. 就是最后的答案.然后做一次前缀和,然后就变成了统计差是一个定值的情况. 令$A(s[i])++$ $B(s[i])+=i$ 然后卷积一次就可以了,然后用后半部分减去前半部分即可. 并不需要两次FFT 然后发现$0$的情况会导致重叠.所以特判就好了. #include <map> #include <cmath> #include <queue> #include <cstdio> #…
题意:一段长为 i 的项链有 a[i] 种装饰方式,问长度为n的相连共有多少种装饰方式 分析:采用dp做法,dp[i]=∑dp[j]*a[i-j]+a[i],(1<=j<=i-1) 然后对于这种递推式,也就是dp[i]等于前j个dp数组和a数组的卷积,然后可看所有的 一看n是1e5,所以暴力超时,然后采用cdq分治加速,这种卷积递推通常采用cdq分治加速 cdq的话很简单了,就是先递归左边,算左对右的贡献,递归右边就行,一半一半更新 #include <cstdio> #inclu…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5683 题意: 问题描述 zxa最近对按位异或(exclusive disjunction)产生了极大的兴趣,为此他拿出了一个长度为nn的非负整数序列a_1,a_2,\cdots,a_na​1​​,a​2​​,⋯,a​n​​. zxa觉得这样太单调了,于是他定义了一种方法funct(x,y)funct(x,y),表示将a_xa​x​​不可逆转地修改为yy后计算\otimes_{1\leq i < j\…
题意:查询区间中位数 思路:模板题,相当于区间第K大的数,主席树可以水过,但划分树是正解.但还没搞明白划分树,先上模板 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <string> #include <vector> #include <algorithm&g…
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. Input 第一行N,M 接下来M行,每行形如1 a b c或2 a b c Output 输出每个询问的结果 Sample Input 2 5 1 1 2 1 1 1 2 2 2 1 1 2 2 1 1 1 2 1 2 3 Sample Output 1 2 1 HINT…
题目链接 不会LCTqwq,看题解似乎SPFA也可以. 把边按a排序,从小到大每加一条边就以b为距离跑一遍SPFA,类似于Kruskal的想法吧…… 貌似是个暴力 (luoguLCT模块的题我都快通过了,然而还是不会LCT蛤蛤蛤) #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<cctype> #include<queue&g…
2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 6286  Solved: 2489[Submit][Status][Discuss] Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col.为了满足墨墨的要求,你知道你需要干…
题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂我都没看懂...我写的是每三位拆分然后再合并 代码: //强烈谴责卡常数而需要大量优化 //upd:还卡精度... #include<algorithm> #include<iostream> #include<cstring> #include<cstdio>…
hdu 5730 Shell Necklace 题意:求递推式\(f_n = \sum_{i=1}^n a_i f_{n-i}\),模313 多么优秀的模板题 可以用分治fft,也可以多项式求逆 分治fft 注意过程中把r-l+1当做次数界就可以了,因为其中一个向量是[l,mid],我们只需要[mid+1,r]的结果. 多项式求逆 变成了 \[ A(x) = \frac{f_0}{1-B(x)} \] 的形式 要用拆系数fft,直接把之前的代码复制上就可以啦 #include <iostream…
Perhaps the sea‘s definition of a shell is the pearl. However, in my view, a shell necklace with n beautiful shells contains the most sincere feeling for my best lover Arrietty, but even that is not enough. Suppose the shell necklace is a sequence of…
Shell Necklace Problem Description Perhaps the sea‘s definition of a shell is the pearl. However, in my view, a shell necklace with n beautiful shells contains the most sincere feeling for my best lover Arrietty, but even that is not enough. Suppose…
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=…
题目来源:NOI2019模拟测试赛(七) 非原题面,题意有略微区别 题意: 吐槽: 心态崩了. 好不容易场上想出一题正解,写了三个小时结果写了个假的点分治,卡成$O(n^2)$ 我退役吧. 题解: 原题是求随机树分治的期望深度和,题意相同. 对于一个点$x$,考虑点$y$是否能作为它在点分树上的祖先节点,显然当且仅当$y$在$x$到$y$的路径中第一个被选为分治中心时会对$x$产生1的贡献: 由于路径上所有点被选到的概率都是相等的,所以此时的期望就是$\frac{1}{dis(x,y)}$: 那…
[LOJ#575][LNR#2]不等关系(容斥,动态规划,分治FFT) 题面 LOJ 题解 一个暴力\(dp\),设\(f[i][j]\)表示考虑完了前\(i\)个位置,其中最后一个数在前面所有数中排名是第\(j\)大,那么转移的时候枚举一下当前数是第几大,并且满足不等式的限制就可以了,然后拿前缀和优化一下就可以做到\(O(n^2)\). 我们把所有连续的<看成一段,这样子题目就变成了每次要选出一段连续的上升序列,然后相邻两个连续段之间必须满足前一段的末尾要大于后一段的开头. 显然这个大于号是不…
HDU 6900 Residual Polynomial  题意: 给出一个多项式\(f_1(x) = \sum_{i=0}^na_ix^i\) 对于任意\(i>=2\),满足\(f_i(x) = b_i(f_{i-1}(x))'+c_if_{i-1}(x)\) 要求得到\(f_n(x)\)的各次项系数模\(998244353\) \(n\le 10^5, 0\leq a_i,b_i,c_i < 998244353\) 题解: 考虑把\(f_1,f_2,\cdots,f_n\)写成\(n\)列…
传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中有不同的队友. 这年头真是--分治FFT都开始烂大街了-- 我们来推一推吧 这显然是一个1d1d的DP,用f[i]表示i名队员的方案数 f[i]=∑j=0i−1f[i−j−1]∗Cji−1 即i−1个人里面选j个和i组队(似乎类似strling数) 然后化一下简,便可得到 f[i]=(i−1)!∑j…
/* hdu 1402 A * B Problem Plus FFT 这是我的第二道FFT的题 第一题是完全照着别人的代码敲出来的,也不明白是什么意思 这个代码是在前一题的基础上改的 做完这个题,我才有点儿感觉,原来FFT在这里就是加速大整数乘法而已 像前一题,也是一个大整数乘法,然后去掉一些非法的情况 */ #pragma warning(disable : 4786) #pragma comment(linker, "/STACK:102400000,102400000") #in…
题目链接:hdu 3842 Machine Works 详细题解: HDU 3842 Machine Works cdq分治 斜率优化 细节比较多,好好体会一下. 在维护斜率的时候要考虑x1与x2是否相等,这里要处理一下. #include<bits/stdc++.h> #define F(i,a,b) for(int i=a;i<=b;i++) using namespace std; typedef long long ll; typedef pair<int,ll>P;…
题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这题可以用树的分治+字符串hash,不过搜索+剪枝写的好一样可以过,而且跑的时间和正解差不多. 搜索的做法就是先随便找一个点当作根,然后预处理一下最大的深度,然后枚举起点,开始向各个方向遍历,如果这个点的最大深度小于未匹配的字符串长度,那么久向父亲方面搜. #include<bits/stdc++.h…
分治FFT是几个算法的统称.它们之间并无关联. 分治多项式乘法 问题如求\(\prod_{i=1}^na_ix+b\). 若挨个乘复杂度为\(O(n^2\log n)\),可分治做这件事,复杂度为\(O(n\log^2 n)\).采用这种算法的条件是最终乘出来的式子长度是\(O(n)\)的. 也可以用多项式ln和exp做到\(O(n\log n)\). 用CDQ分治快速求一类多项式的算法 第一类 已知\(f(x)=\sum_{i=1}^xf(i)g(x-i)\),给定\(f(0)\).\(g(1…
题目大意 有\(n\)种颜色的球,第\(i\)种有\(a_i\)个.设\(m=\sum a_i\).你要把这\(m\)个小球排成一排.有\(q\)个询问,每次给你一个\(x\),问你有多少种方案使得相邻的小球同色的对数为\(x\). \(n\leq 10000,m\leq 200000\) 题解 我们考虑把这些小球分段,每段内所有小球颜色相同,但相邻两段的小球颜色可以相同. 设第\(i\)种颜色有\(b_i\)段,那么分\(j\)段的方案数是\(\frac{(\sum b_i)!}{\sum(b…
题目描述 在一个 \(n\) 个点的有向图中,编号从 \(1\) 到 \(n\),任意两个点之间都有且仅有一条有向边.现在已知一些单向的简单路径(路径上任意两点各不相同),例如 \(2\to 4\to 1\).且已知的这些简单路径之间没有公共的顶点,其 余的边的方向等概率随机. 你需要求出强连通分量(如果同时存在 \(a\) 到 \(b\), \(b\) 到 \(a\) 的有向路径,则 \(a\), \(b\) 属于同一个强联通分量) 的期望个数.如果最后答案是 \(\frac{A}{B}\),…
最裸的点分治+fft,调了好久,太菜了.... #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; ,inf=1e9; ); int f[maxn],t,last[maxn],pre[maxn],other[maxn],siz[maxn…
题目描述 有一个\(n\)个元素的置换,你要选择\(k\)个元素,问有多少种方案满足:对于每个轮换,你都选择了其中的一个元素. 对\(998244353\)取模. \(k\leq n\leq 152501\) 题解 吐槽 为什么一道FFT题要把\(n\)设为\(150000\)? 解法一 先把轮换拆出来. 直接DP. 设\(f_{i,j}\)为前\(i\)个轮换选择了\(j\)个元素,且每个轮换都选择了至少一个元素的方案数. \[ f_{i,j}=\sum_{k=1}^{a_i}f_{i-1,j…
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{…
题目描述 对于一个\(1\)到\(n\)的排列\(a_1,a_2,a_3,\ldots,a_n\),我们定义这个排列的\(P\)值和\(Q\)值: 对于每个\(a_i\),如果存在一个最小的\(j\)使得\(i<j\)且\(a_i<a_j\),那么将\(a_i\)和\(a_j\)连一条无向边.于是就得到一幅图.计算这幅图每个联通块的大小,将它们相乘,得到\(P\).记\(Q=P^k\). 对于\(1\)到\(n\)的所有排列,我们想知道它们的\(Q\)值之和.由于答案可能很大,请将答案对\(9…
题目大意 ​ 小Q发明了一种进位制,每一位的变化范围是\(0\)~\(b_i-1\),给你一个这种进位制下的整数\(a\),问你有多少非负整数小于\(a\).结果以十进制表示. ​ \(n\leq 120000,0\leq a_i<b_i\leq 1000000\) 题解 ​ 就是求这个数. ​ 那没什么好说的,直接分治FFT 处理左半边(低位)的\(c_1=\prod b_i\)和答案\(d_1\),右半边的\(c2,d2\) ​ 那么\(c=c_1\times c_2,d=d_2\times…