「TJOI / HEOI2016」字符串】的更多相关文章

「TJOI / HEOI2016」字符串 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为 \(n\) 的字符串 \(s\),和 \(m\) 个问题.佳媛姐姐必须正确回答这 \(m\)个问题,才能打开箱子拿到礼物,升职加薪,出任 \(CEO\),嫁给高富帅,走上人生巅峰.每个问题均有 \(a,b,c,d\) 四个参数,问你子串 \(s[a-b]\) 的所有子串和 \(s[c-d]\) 的最长公共前缀的长度的最大值是多少?佳媛姐…
题意:给你一个子串,m次询问,每次给你abcd,问你子串sa-b的所有子串和子串sc-d的最长公共前缀是多长 题解:首先要求两个子串的最长公共前缀就是把反过来插入变成最长公共后缀,两个节点在parent树上的lca就是最长公共后缀.找到某个子串就是在parent树上倍增 我们先二分答案,问题就变成了子串sx-y的所有子串中是否包含子串p,我们先倍增找到子串p,然后查询p在parent树上的子树是否包含子串sx-y的子串(parent树上的子树就是所有以p作为后缀的子串,如果sx-y的子串包含p,…
题解 我们冷静一下,先画一棵后缀树 然后发现我们要给c和d这一段区间在[a,b]这一段开头的串里找lcp 而lcp呢,就是c点的祖先的到根的一段,假如这个祖先的子树里有[a,b - dis[u] + 1],那么这个u就是合法的,维护每个点子树里出现过的后缀串起点可以用线段树合并 (这里的深度指后缀树上该点到根的距离) 我们先用min(b - a + 1,c - d + 1)限制一下这个祖先的深度,选择距离根深度最近且深度>= min(b - a + 1,c - d + 1),找的这个点称为p 那…
字符串好难啊不会啊 #include <iostream> #include <cstdio> using namespace std; int n, m, rnk[100005], cnt[100005], tmp[100005], p, mx=128, saa[100005], tot, a, b; int height[100005], gg[19][100005], mlg[100005], rot[100005], c, d; char ss[100005]; struc…
题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> #include<algorithm> inline int read() { int x = 0,f = 1; char c = getchar(); while(c < '0' || c > '9')c = getchar(); while(c <= '9' &&…
#2054. 「TJOI / HEOI2016」树 思路: 线段树: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 100005 #define maxm maxn<<1 #define maxtree maxn<<2 int n,head[maxn]…
#2057. 「TJOI / HEOI2016」游戏 思路: 最大流: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f #define maxn 2000005 ; ][],idl[][],E[maxn],V[maxn],head[maxn]; ][]; ]…
#2055. 「TJOI / HEOI2016」排序   题目描述 在 2016 年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他. 这个难题是这样子的:给出一个 1 11 到 n nn 的全排列,现在对这个全排列序列进行 m mm 次局部排序,排序分为两种: (0,l,r) (0, l, r)(0,l,r) 表示将区间 [l,r] [l, r][l,r] 的数字升序排序 (1,l,r) (1, l ,r)(1,l,r) 表示将区间 …
loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k}(j-k)^{i}\] \[\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}S(i,j)·2^j·j!\] \[\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{n}S(i,j)·2^j·j!\] \[\sum\limits_{j=…
不错的推柿子题 LOJ #2058 题意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二类斯特林数 $ Solution:$ 首先考虑第二类斯特林数的意义:将$ n$个有标号元素放入$ m$个无标号集合(无空集)的方案数 我们枚举空集的数量容斥:$ S(n,m)=\frac{1}{m!}\sum\limits_{k=0}^m(-1)^kC_m^k(m-k)^n$ 乘上$ \frac{1}{m!}$是因为容斥…
题解 我并不会做,我觉得很像网络流但是毫无建图思路 我猜了个贪心,写了一下--啥过了90分?!这数据是有多水啊.. 哦又是行列拆点 不过要按照'#'进行拆点,也就是一段横着的区间只能放一个炸弹,一段竖着的区间只能放一个炸弹,如果两个区间的交点是一个空格的话,那么就把这两个区间拆出来的点连边 最后我们只要求一下最大匹配就可以了 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putchar(' ') #d…
题解 这个我们处理出来每一位能变化到的最大值和最小值,包括自身 然后我们发现 \(f[i] = max(f[i],f[j] + 1) (mx[j] <= a[i] && a[j] <= mi[i])\) 喜闻乐见的三维偏序转移法 还写树套树??? 直接CDQ分治就好啦 为啥他们的代码就1.xK?????? 我就3.1K 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putc…
题解 看错题了,我以为是询问Q是个数字,问它在哪个位置 我一想这不直接01序列搞一下就好了嘛(事实上是012) 然后呢,我发现样例没过. 啊我看错题了,问的是Q这个位置是啥-- 哦,套用我之前的想法不是直接拿线段树维护01序列然后二分吗--(可以不用012,直接是0表示小于等于mid的值,1表示大于mid的值) 哎我要是没看错题这题我是不是做不出来啊 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space pu…
题解 一写过一交A的水题 只要求一个dfs序,新加一个标记在子树所在的区间上覆盖上该点,维护深度最大的答案 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putchar(' ') #define pii pair<int,int> #define fi first #define se second #define MAXN 100005 #define pb push_back #def…
推柿子 第二类斯特林数的容斥表达 fft卡精度就用ntt吧qwq. #include <iostream> #include <cstdio> using namespace std; typedef long long ll; int n, lim=1, limcnt, rev[300005], inv[300005], a[300005], b[300005], jie[300005]; const int mod=998244353, gg=3, gi=332748118;…
记横联通是一块横着的没有硬石头的地,把他们编号.竖联通同理. 对于一个空地,将其横联通编号和竖联通编号连边,二分图匹配,最大匹配为答案. #include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; int n, m, hr[55][55], sr[55][55], hcnt, scnt, hea[5005], cnt, yy, t…
当年我还没学cdq的时候在luogu上写过树套树的代码orzzz ref #include <algorithm> #include <iostream> #include <cstdio> using namespace std; int n, m, uu, vv, dp[100005], c[100005]; struct Node{ int val, zxz, zdz, idx; }nd[100005], tmp[100005]; bool cmpzxz(Node…
ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; int n, m, a[100005], sum[400005], tag[400005], q; struct Node{ int opt, lll, rrr; }nd[100005]; void pushDown(int o, int l, int r, int lson, int rson, int m…
我们把\(S(i, j)j!\)看成是把\(i\)个球每次选择一些球(不能为空)扔掉,选\(j\)次后把所有球都扔掉的情况数(顺序有关).因此\(S(i, j)j! = i![x^i](e^x - 1)^j\) 为了求出答案,我们需要研究如下的生成函数的性质. \(P(x) = \sum_{i = 0}^{n}(2e^x - 2)^i = \sum_{i = 0}^{n} 2^i \sum_{j = 0}^{i} (-1)^{i - j}e^{jx} {i \choose j} = \sum_{…
「TJOI 2018」教科书般的亵渎 题目描述 小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为 \(a_i\) ,且每个怪物血量均不相同, 小豆手里有无限张"亵渎". 亵渎的效果是对所有的怪造成 \(1\) 点伤害,如果有怪死亡,则再次施放该法术.我们认为血量为 \(0\) 的怪物死亡. 小豆使用一张"亵渎"会获得一定的分数,分数计算如下,在使用一张"亵渎"之后,每一个被亵渎造成伤害的怪会产生 \(x^k\) ,其中 \(x\)…
「TJOI 2018」游园会 Party 题目描述 小豆参加了 \(NOI\) 的游园会,会场上每完成一个项目就会获得一个奖章,奖章只会是 \(N, O, I\) 的字样. 在会场上他收集到了 \(K\) 个奖章组成的串.兑奖规则是奖章串和兑奖串的最长公共子序列长度为小豆最后奖励的等级. 现在已知兑奖串长度为 \(N\) ,并且在兑奖串上不会出现连续三个奖章为 NOI ,即奖章中不会出现子串 NOI . 现在小豆想知道各个奖励等级会对应多少个不同的合法兑奖串. \(N \leq 1000, K…
「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border}\) 思路 代码 \(\text{KMP}\) 匹配 思路 代码 Trie 数据结构 01-Trie 代码 练习题 Hash Bovine Genomics 思路 代码 [TJOI2018]碱基序列 思路 代码 [CQOI2014]通配符匹配 [NOI2017] 蚯蚓排队 思路 代码 KMP See…
传送门 我们正常的建好Trie后求一遍fail.之后对于每一个节点,从它的fail连向它一条单项边.然后从根节点开始dfs. 记sum[i]代表从根到i号节点所代表的的字符串出现的次数,即该点的权值. 设当前的节点为x,他有一个孩子y,则使sum[x] += sum[y]. 记得记录一下每个字符串结尾的节点编号,设第i个字符串结尾的编号为id[i],对于每个字符串i最后输出sum[id[i]]即可. #include <iostream> #include <cstdio> #in…
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询问会给定一个长度为 \(k\) 的字符串 \(w\) 以及一对 \(L,R\), 求所有满足 \(i\in [L,R]\) 的 \(w[l_i:r_i]\) 在 \(s\) 中的出现次数之和. \(n,m,k,q\le 1\times 10^5\), \(\sum |w|\le 1\times 10…
「BZOJ 2534」 L - gap字符串 题目描述 有一种形如 \(uv u\) 形式的字符串,其中 \(u\) 是非空字符串,且 \(v\) 的长度正好为 \(L\), 那么称这个字符串为 \(L-Gap\) 字符串 给出一个字符串 \(S\), 以及一个正整数 \(L\), 问 \(S\) 中有多少个 \(L-Gap\) 子串. \(1 \leq |S| \leq 5 \times 10^4, L \leq 10\) 解题思路 : 考虑要对特征串计数,不妨枚举 单个 \(u\) 的长度…
LOJ #3049. 「十二省联考 2019」字符串问题 https://loj.ac/problem/3049 题意:给你\(na\)个\(A\)类串,\(nb\)个\(B\)类串,\(m\)组支配关系,求一个长度很长的串\(t_1t_2...t_k\)满足 \(t_i\)为\(A\)类串,\(t_i\)能支配一个\(B\)类串,使得该\(B\)类串为\(t_{i+1}\)的前缀. 分析: 一个简单的暴力就是枚举\(A_i\)后面能接的\(A_j\)进行连边,然后拓扑序求一下最长路. 很难优化…
题目 [题目描述] Yazid 和 Tiffany 喜欢字符串问题.在这里,我们将给你介绍一些关于字符串的基本概念. 对于一个字符串 $S$, 我们定义 $\lvert S\rvert$ 表示 $S$ 的长度. 接着,我们定义该串的子串 $S\left( {L,R}\right)$ 表示由 $S$ 中从左往右数,第 $L$ 个字符到第 $R$ 个字符依次连接形成的字符串,特别地,如果 $L < 1$ 或 $R > \lvert S\rvert$ 或 $L > R$,则 $S\left(…
LOJ#3095. 「SNOI2019」字符串 如果两个串\(i,j\)比较\(i < j\),如果离\(a_{i}\)最近的不同的数是\(a_{k}\),如果\(j < k\)那么\(i\)排在\(j\)前面 否则的话如果\(a_{k} < a_{i}\),那么\(i\)排在\(j\)前 于是写个比较函数扔到sort里就可以了 #include <bits/stdc++.h> #define fi first #define se second #define pii pa…
「JSOI2015」字符串树 传送门 显然可以树上差分. 我们对于树上每一条从根出发的路径都开一 棵 \(\text{Trie}\) 树,那么我们就只需要在 \(\text{Trie}\) 树中插入一个字符串时把经过的节点都加 \(1\) 就好了,但是直接开空间会炸掉所以加一个可持久化. 还有一个小问题:我们读入的时候,如果用 char* 来存一条边上的字符串,那么每次都要用不同的 char[] 来传值,不然你就会发现每次的边的值都没变,可能是指针的一些原因吧. #include <cstrin…
写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实,就算不懂得链表,也完全可以学习”文件“相关知识点,但在此之前最好有”指针“基础. 本篇文章整理自<C语言程序设计教程--人民邮电出版社>第十二章——文件,以作文件探讨. 一.数据流与文件概念 二.文件的打开与关闭 三.文件的顺序读写 四.文件的随机读写 五.出错检查 六.低级I/O函数与标准I/O…