首页 > TAG信息列表 > nxt
2022-9-11/12 #27 自弹 自唱 自赏 不如自封为王
发现了栀子的一首歌 Go crazy for me,真上头。 昨天有一根木刺扎进了我右手中指,伤口愈合后挑不出来了,写代码按到那里就会痛一下。 匈牙利跑二分图匹配可以找到增广路后再清空 vis 数组,某些题中会有优越性。(反正不劣) 做了 CF848D Shake It!,觉得挺简单,就不记录了。 CF1726G A CertainD K匹配 kmp 区间匹配计算贡献
链接:https://ac.nowcoder.com/acm/problem/213329来源:牛客网 题目描述 牛牛是赫赫有名的字符串高手,现在牛牛发现了一种新的匹配方式。给定一个字符串SSS和一个字符串TTT,如果SSS存在一个长度为kkk的子串Sl1,l1+k−1S_{l_1, l_1 + k - 1}Sl1,l1+kC 栗酱的数列 kmp结论题 模运算移项差分
链接:https://ac.nowcoder.com/acm/contest/27589/C来源:牛客网 题目描述 栗酱有一个长度为n的数列A,一个长度为m的数列B,现在询问A中有多少个长度为m的连续子序列A', 满足(a'1+b1)%k = (a'2+b2)%k = …… = (a'm + bm)%k。 输入描述: 第一行一个数T,表示有TTimus 1569
https://acm.timus.ru/problem.aspx?space=1&num=1569 题意就是给你一个无向图,求最小直径生成树。 这题\(O(n^3)\)的题解有很多,但是这题其实可以做到\(O(\frac{n^3}{\omega})\),其中\(\omega\)是bitset中的,可能是\(32\)或\(64\)。 首先设最优的生成树是\(T\)。那么假设\(T\)的直径支持双端插入的可撤销回文自动机
支持双端插入的可撤销回文自动机 打多校看到的科技,板子++ 参考来源:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=53195473 template <class T, int SIZE, T offset> struct Depam { struct Node { int len, pos, fail; int nxt[SI多次查询与树上点u距离为k的点,例题
https://atcoder.jp/contests/abc267/tasks/abc267_f 此题目首先有结论:距离树上任意一点距离最远的点,是直径的其中一个端点 https://www.cnblogs.com/ydUESTC/p/16664485.html 故对于一个查询u,k如果存在一个答案,则可以在u到端点L或R的路径中查找到(因为这两条路径已经包含最远路径P2375 [NOI2014] 动物园
定义字符串的前 \(i\) 个字符组成的字符串中一最大子串 \(T\) 即使前缀也是后缀,且 \(|T|\leq i/2\) ,则定义 \(num[i]=|T|\) ,求 \(num[i]+1\) 之积 \(mod\) 1000000007。 \(|S|\leq 10^6\) 。 熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除P3426 [POI2005]SZA-Template
对于字符串刻印章,使每个字符都能被印出来,并且不能印上其他字符。求印章最短长度。 \(|S|\leq 5\times 10^5\)。 看到题目第一感觉是KMP,但具体实现很费脑筋。 先举个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 s[i] a b a b b a b a b b a b a nxt[i] 0 0 1 2 0 1 2 3 4 5 6 7构造
构造题常常需要发现一些隐蔽的性质。提高观察力! CF1670E 题目大意 给定一个 \(n = 2^p\) 个节点的树的形态,需要给每个点和每条边赋权值,一共 \(n\) 个点和 \(n-1\) 条边,权值在\([1, 2n-1]\) 里面选并且不能重复。然后钦定一个根节点。 需要使根节点到每个点和每条边的路径上的权值【模板】图论
最小环 Floyd 求最小环+输路径 模板指路 点击查看代码 #include<bits/stdc++.h> using namespace std; #define int long long int a[105][105],d[105][105],pa[105][105],ans[105]; int mi=1e9,co; void get_pa(int x,int y){ if(!pa[x][y]) return; get_pa(x,pa[x][y]); a「学习笔记」字符串基础:Hash,KMP与Trie
「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录「学习笔记」字符串基础:Hash,KMP与TrieHash算法代码KMP算法前置知识:\(\text{Border}\)思路代码\(\text{KMP}\) 匹配思路代码Trie数据结构01-Trie代码练习题HashBovine Genomics思路代码[TJOI2018]碱基序列思路代码[CQOI201扩展kmp
扩展kmp 扩展kmp处理的问题: 字符串S和字符串T,求S的每个后缀与T的最长公共前缀 nxt数组与kmp的不一样 char S[N], T[N]; int n, m, nxt[N], extend[N]; //nxt[i]表示从T[i]开始的后缀与T的最长公共和前缀 //extend[i]表示从S[i]开始的后缀与T的最长公共和前缀 //n,m表示S,T的长度2022牛客多校第七场
2022牛客多校第七场 过程 本场首先C题签到,一道小构造,随后F想了想直接暴力删除即可,之后G在理解题意后做出,随后便开始坐牢,队友和我在J上的dp为五次方,没敢下手,,随后在最后时刻想明白了K,但已经没时间下手了,惨淡收场。 题解 C 生成一个排列使得\(P_i\not ={}A_i\),首先如果\(A_i\)全相等【题解】后缀自动机(SAM)选做(22.8.11)
做完这些我才感觉我的后缀自动机入门了之前写的东西就是一坨屎 对于后缀自动机的学习,我总结了以下三句话: 千万不要死磕模板!!! 千万不要死磕模板!!! 千万不要死磕模板!!! 谁死磕模板谁&#*%#(@# 这次就主要是我对于后缀自动机的理解,只是纯纯的自动机,不包含如何构造,因为那东西实在不行就背背【题解】Educational Codeforces Round 72
因为最近不想做简单题,所以只有 C-E C.The Number Of Good Substrings 题目描述: 原题面 题目分析: 我们发现一个长度为 \(len\) 的二进制串能表示的长度最多就是 \(2^{len}-1\),所以我们就能很明显的发现一个性质:我们枚举的区间长度不可能超过 \(\log n\),因为如果超过这个数值很显然后缀自动机(SAM)习记
前言 本文没有构造证明,因为我不会 基础概念看看就好,自娱自乐。 后期重点更新相关题目的简单总结,方便复习 SAM 基础概念 S 的后缀自动机是一种能够识别所有 S 的子串的自动机类型的数据结构(DFA)。 暴力后缀自动机 对于字符串 \(S\),建立插入了 \(|S|\) 个后缀的 Trie 树。这样显然可ARC134E Modulo Nim
Description 现在在黑板上写了 \(n\) 个数 \(A_1,\dots A_n\) ,有两个人轮流来修改这些数字并进行博弈。如果所有数字的最大值是 \(0\) 当前操作者胜利。否则在 \([1,\max]\) 中选择一个数 \(m\) 并将所有数字改为它模 \(m\) 的余数 给定 \(a_1\dots a_n\) ,求有多少 \(\{A_i\}\) 满2022/7/27 自学记录
发现自己 KMP 忘了,于是再学一遍。 懒得写了,直接写题。 P3375 【模板】KMP字符串匹配 挂一个模板 #include <bits/stdc++.h> using namespace std; using i64 = long long; int main() { ios::sync_with_stdio(false); cin.tie(0); string a, b; cin >> a >> b;转载 | 链式前向星
原文链接 链式前向星是一种以存边的方式储存图的数据结构,经常在各种竞赛中使用。 链式前向星储存的每个边由三个变量储存:\(to\),\(v\),\(nxt\)。 其中,\(from\)和\(to\)代表这条边连接的两个点,\(v\)代表这条边的权值,\(nxt\)代表同一个\(from\)的下一条边 我们一般用一个\(head\)数[NOI2014] 动物园 (kmp)
题面 浅讲一下思路 1、最开始呢,并没有意识到问题的严重性。认为num与nxt是一样的,再加上一个不重叠的条件即可。然后就发现样例都过不去,还觉得自己可对了。再次读题发现num是字符串的数量,于是又加上了nxt inline void get_nxt(const string s){ int j=0;nxt[0]=num[0]=0;字符串基础
KMP 应用:求字符串s在文本T中出现的次数与位置 概念: 后缀 从某个位置 i 开始到整个串末尾结束的一个特殊子串。字符串 S 的从 i 开头的后缀表示为 Suffix(S, i),也就是 Suffix(S, i) = S[i…|S|-1]。 真后缀 除了 S 本身的 S 的后缀 前缀 从串首开始到某个位置 i 结束的一个特Educational Codeforces Round 132 E,F
E 容易发现,我们在一个点进行修改,一定可以将经过这个点的非法路径数变成\(0\)。具体的方案就是将\(i\)异或上\(2^{p_{i}}\),其中\(p_{i}>30\),并且\(p\)要两两不同。(比如\(p_{i}=30+i\)就是一组可行的\(p\)) 此时我们有一个贪心策略:为了让更多非法路径变成合法的,那么我们修改的点深度220722 T1 分树 (模拟)
dfs一遍求出以每个节点为根的子树大小,然后枚举n的约数,对于每个约数i,统计sz[ ]是i的倍数的有多少个(开桶统计),如果有n/i个则答案+1。 这道题也就是个结论题,画图分析一下。 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=2e6+10; 4 int head[N],to[N],nxt[N],dijkstra最短路算法(堆优化)
这个算法不能处理负环情况,请转到Floyd算法或SPFA算法(SPFA不能处理负环,但能判断负环) SPFA(SLF优化):https://www.cnblogs.com/yifan0305/p/16391419.html 代码很长,耐下心来看完,存储方法为链式前向星存储。 (如果内存放得下的话,建议稠密图用邻接矩阵(或者跑floyd),稀疏图用邻接表,只是luogu [ZJOI2007] 矩阵游戏
[ZJOI2007] 矩阵游戏 题目描述 小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个 \(n \times n\) 黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作: 行交换操作:选择矩阵的任意两行,交换这两行(即交换