首页 > TAG信息列表 > TJOI2016
[HEOI2016/TJOI2016]字符串 题解
SA+二分+主席树 Statement \(q\) 次询问 \(s[a\dots b]\) 的所有子串和 \(s[c\dots d]\) 的最长公共前缀最大值 \(n,q\le 10^5\) Solution 其实感觉算不上黑题 看到 LCP,容易想到 SA,管都不管,先套一个 SA SA 套路二分答案,然后把 height 数组分组 设 \(l=\min\{i|height[i]>=mid\},r=[HEOI2016/TJOI2016]求和
题意 :设 \(S\) 是第二类斯特林数, 求 \(\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}S(i,j) \times 2^j \times j!\) 因为有 \(m^n =\sum\limits_{i=0}^{m}\dbinom m i i! \times S(n, i)\) 设 \(f(x) = x^n\), \(g(x) = x! \times S(n, x)\), 根据二项式反演 : \(f(m) = \su[HEOI2016/TJOI2016]序列(CDQ分治优化DP)
洛谷题目传送门 解题思路 题目和最长上升子序列比较像,我们考虑用\(dp\)来解决 设\(f_i\)表示以\(i\)这个位置结束的最长序列的长度,\(Max_i\)表示\(i\)这个位置最大的数,\(Min_i\)表示\(i\)这个位置最小的数,转移时枚举上一个选的元素\(j\)是哪个位置 因为最多只会变一个数,所以对于一[HEOI2016/TJOI2016]序列(cdq优化dp)
给定一个序列 \(a\) 和若干对整数 \(x,y\),表示在一次变化中, \(a_x \gets y\)。这次变化结束后,\(a\)复原。试选出一个子序列,使其在任意一次变化中都满足单调不降。 LIS 问题作为 dp 入门题十分熟悉,即 \(f_i=\max\{f_j\}+1\),要求 \(j\) 满足 \(j<i,a_j\le a_i\)。这道题实际上是增加[HEOI2016/TJOI2016]字符串
好神。 考虑到我们二分答案。 那么我们要做的是这样一个事情: 判定s[c,d - l]在s[a,b]是否以子串形式出现过。 那这是一个\(SAM\)的很套路的题目: 我们考虑到我们维护每个endpos集合的出现的子串,这个我们在\(link\)树上做线段树合并即可。 我们从表示\(s[1,b]\)的SAM节点倍增往上【题解】[HEOI2016/TJOI2016]字符串
[HEOI2016/TJOI2016]字符串 \(\text{Solution:}\) 记录一下这题获得的启发。 最长公共前缀/后缀一类问题,具有可二分性。 考虑二分一个答案,然后看如何检验。 如果答案是 \(mid,\) 那么对应的串应该就是 \(s[c\cdots c+mid-1],\) 我们发现:它是前缀 \(s[1\cdots c+mid-1]\) 的后缀[HEOI2016/TJOI2016]游戏
二分图的题 可以分别以行列和列行建 1.二分图 #include<bits/stdc++.h> using namespace std; const int N=555; int n,m; char c[N][N]; int a[N][N],b[N][N]; int flag[N<<5],match[N<<5]; int head[N<<5],nxt[N<<6],to[N<<6]; long long ans; intluogu P4091 [HEOI2016/TJOI2016]求和
题面传送门 并不觉得这道题有黑题难度。 首先因为当\(j>i\)时\(S(i,j)=0\)所以这个东西其实可以写成\(\sum\limits_{j=0}^{n}{j!\times 2^j\sum\limits_{i=0}^{n}{S(i,j)}}\) 我们设\(H(j)=\sum\limits_{i=0}^{n}{S(i,j)}\)就可以\(O(n)\)算这个式子的值了。 上面那个式子我们考虑Luogu P2825 [HEOI2016/TJOI2016]游戏
题链 分析 如果没有硬石头,显然裸的二分图匹配 加上硬石子,相当于分段后跑二分图匹配即可 #include<bits/stdc++.h> #define pb push_back using namespace std; const int N=105,M=10005; int n,m,id1[N][N],id2[N][N],ma[M]; char s[N][N]; vector<int>V[M]; bool fl[M]; boolP4092 [HEOI2016/TJOI2016]树 题解
Link P4092 [HEOI2016/TJOI2016]树 Solve 这道题是一个树剖显然能解决的问题,但是lyz神仙非要离线做懒得写树剖 考虑离线做,一个点把一条链分成两部分,比较类似于删边的操作,对于只有删边,我们就可以考虑倒过来处理,就只有连边了,用并查集来维护 如果最后是被标记过的点,把\(fa[]\)标为自「HEOI2016/TJOI2016」排序
「HEOI2016/TJOI2016」排序 题目大意 给定一个 \(1\) 到 \(n\) 的排列,每次可以对这个序列的一个区间进行升序/降序排序,求所有操作后第 \(q\) 个位置上的数字。 题解 大棒子,又学到了许多。 做法很多,这里大概讲一下主流的几种做法。 在线做法 线段树合并&分裂 其实将一个区间升序排序[HEOI2016/TJOI2016]
【题目描述】 在 \(2016\) 年,佳媛姐姐喜欢上了数字序列。因而她经常研究关于序列的一些奇奇怪怪的问题,现在她在研究一个难题,需要你来帮助她。 这个难题是这样子的:给出一个 \(1\) 到 \(n\) 的排列,现在对这个排列序列进行 \(m\) 次局部排序,排序分为两种: 0 l r 表示将区间 \([l,r]\)BZOJ 4555: [Tjoi2016&Heoi2016]求和
好久之前做的题了,算是我的NTT入门题了,然后我点开题单里的多项式,除了这题全TM是权限题当场去世 废话不多说直接推式子: \[ ans=\sum_{i=0}^n\sum_{j=0}^i \left\{_j^i\right\}\times 2^j\times j!\\=\sum_{i=0}^n\sum_{j=0}^n \left\{_j^i\right\}\times 2^j\times j!\\=\sum_{j=0}^洛谷 P2824 [HEOI2016/TJOI2016]排序
题目链接 本题采用线段树,将排序的操作巧妙转化为0/1序列的区间覆盖问题 首先我们先二分最终答案\(ans\) 之所以答案有单调性,是因为我们进行了如下转换 将原序列\(A\)变为0/1序列\(A'\),若\(a_i < ans\) 则 \(a'_i = 0\) 否则 \(a'_i = 1\),z这样我们就得到了0/1序列\(A'\) 将操P4094 [HEOI2016/TJOI2016]字符串
题意 考虑二分答案\(mid\),现在我们要判断\(s[c...c+mid-1]\)是否在\(s[a...b]\)出现过。 首先找到\(s[c...c+mid-1]\)所在的状态: 建出\(parent\ tree\),从\(s[1...c+mid-1]\)的节点(这个可以记录)用倍增向上跳到最后一个\(len\geqslant mid\)的节点即可,记这个节点为\(now\)。 之后我luogu_P4092 [HEOI2016/TJOI2016]树
https://www.luogu.org/problem/P4092 给定一颗有根树,根为 11,有以下两种操作: 标记操作:对某个结点打上标记。(在最开始,只有结点 11 有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。) 询问操作:询问某个结点最近的一个打了标记的祖先。(这个结点本身也算自己的祖先)[HEOI2016/TJOI2016]树
洛咕 题意:解决这样一个问题:给定一颗有根树,根为 \(1\) ,有以下两种操作: 1. 标记操作:对某个结点打上标记.(在最开始,只有结点 \(1\) 有标记,其他结点均无标记,而且对于某个结点,可以打多次标记.) 2. 询问操作:询问某个结点最近的一个打了标记的祖先.(这个结点本身也算自己的祖先).\(n,m<=1000P4091 [HEOI2016/TJOI2016]求和(第二类斯特林数,ntt)
题面:https://www.luogu.org/problem/P4091 题解:\[\begin{array}{l}f(n) = \sum\limits_{i = 0}^n {\sum\limits_{j = 0}^i {{\rm{S}}(i,j) \cdot {2^{\rm{j}}} \cdot j!} } \\ = \sum\limits_{i = 0}^n {\sum\limits_{j = 0}^n {{\rm{S}}(i,j) \cdot {2^{\rm[HEOI2016/TJOI2016] 求和
有关斯特林数的介绍和斯特林反演:斯特林数及斯特林反演。 本来是想做容斥的,结果发现了一个多项式题目…… 不过容斥和反演息息相关嘛。 这题做完之后感觉卷积也不是那么难,就把它理解成一个预处理一个复杂函数的方法就好了。这样复杂度可以从 \(O(n)\) 求和式变成 \(O(1)\) 取得函数P2825 [HEOI2016/TJOI2016]游戏
题目描述 详见 P2825 [HEOI2016/TJOI2016]游戏。 solution 套路题。 一般思路是行列建点跑二分图最大匹配。 此题中的#会分隔行列,因此我们把每行的极大联通块设为点,列同理建点。 再对于每个*对应的行的极大联通块与列的最大联通块编号连边,跑最大匹配即可。 #include<bits[BZOJ4553][HEOI2016/TJOI2016]序列
传送门 好像是DP再套个裸的CDQ? 树套树是不可能写树套树的,这辈子都不可能写树套树的 对于一个 \(i\) ,设它最小为 \(a_i\) ,原数为 \(b_i\) ,最大为 \(c_i\) \(f_i\) 表示 \(i\) 结尾的最长子序列, \(f_i=f_j+1\) , \(j\) 要满足 \(j<i\) \(c_j \leq b_i\) \(b_j \leq a_i\) 这不就CDQP2824 [HEOI2016/TJOI2016]排序
题目:P2824 [HEOI2016/TJOI2016]排序 思路: 线段树专题讲的。 讲过不只一次了,方法挺巧妙的。 这道题并不是真的需要使用线段树来做排序。 • 考虑这道题的特殊性质,发现我们只需要求最后一个元素的大小。 • 由于是全排列,我们可以直接二分答案x,将排列中大于等于x的标记为1,小于x的元素[Tjoi2016&Heoi2016] 序列 CDQ分治
题意: 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他。玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一个值发生变化。 现在佳媛姐姐已经研究出了所有变化的可能性,她想请教你,能否选出一个子序列,使得在任意一种变化中,这个子序列都是不降的?请你[HEOI2016/TJOI2016]树
来一发大暴力 树链剖分无疑了 对于某个询问节点,二分答案所在的深度,若该深度到该节点上的区间和>0,说明其中有满足条件的点,增加深度继续二分,否则减小深度 线段树上的操作:单点修改+区间查询(区间和) 关于时间: 时间复杂度\(O(nlog^{2}n)\) 虽然不是最优解法,但能过了,稍微卡一下,总时间大P4091 [HEOI2016/TJOI2016]求和
首先,我们需要知道第二类斯特林数组的组合意义(即容斥) $S^m_n = \frac{1}{m!} \sum_{k = 0}^{m}(-1)^kC^k_m(m - k)^n$ 然后,题目中让我们求 $f(n) = \sum_{i = 0}^n\sum_{j = i}^nS^j_i2^jj!$ 我们直接将$S^j_i$展开成上述的组合意义,同时$j$从$0$开始枚举(因为当$m > n$时,$S^m_n