首页 > 其他分享 >最小表示法学习小记

最小表示法学习小记

时间:2023-01-28 09:33:05浏览次数:46  
标签:同构 int 最小 表示法 ++ zxbsf 小记

定义循环同构串——当字符串S中选定一个位置i满足S[i~n]+S[1-i-1]=T,最小表示发用来找到字符串中最小字典序的循环同构串。

类似KMP的思想。先破环成链,然后三指针比较。重点在于若 \(S[i+k]>S[j+k]\) 则 \(i=i+k+1\),这一点将算法优化了很多。

模板题:

#include <bits/stdc++.h>

using namespace std;

int s[600005], n;

int zxbsf()
{
	for (int i = 1; i <= n; i++) {
		s[i + n] = s[i];
	}
	int i = 1, j = 2, k = 0;
	while (i <= n && j <= n) {
		for (k = 0; k <= n && s[i+ k] == s[j + k]; k++);
		s[i + k] > s[j + k] ? i = i + k + 1 : j = j + k + 1;
		if (i == j) j ++;
	}
	return min(i,j);
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> s[i];
	}
	int k = zxbsf();
	for (int i = 0; i < n; i++) {
		cout << s[i + k] << " ";
	} cout << endl;
	return 0;
}

每次向后扫描 \(k\) 的长度,则 \(i\) 或 \(j\),最多向后移动 \(2n\) 的长度,所以时间复杂度是 \(O(n)\) 的。

标签:同构,int,最小,表示法,++,zxbsf,小记
From: https://www.cnblogs.com/CYLSY/p/17069663.html

相关文章

  • 力扣111 二叉树的最小深度
    题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:输入:root=[3,9,20,nul......
  • 0124 训练小记
    0124训练小记ARC153FTri-ColoredPaths图上问题感觉我做的不多,也没什么好套的常见套路。所以考虑从特殊情形和边缘情况什么的入手。那么我们考虑环。正难则反,统计不......
  • 力扣每一一题2023.1.26---1663. 具有给定数值的最小字符串
    小写字符的数值是它在字母表中的位置(从1开始),因此a的数值为1,b的数值为2,c的数值为3,以此类推。字符串由若干小写字符组成,字符串的数值为各字符的数值之和。例......
  • Python int 最大最小值
    Pythonint最大最小值若有错误还请大佬指出Answer不多说,先上答案:注:这是理论上\(\mid\):这个表示整除e.g.:\(5\mid2=2\)max32位\[2^{32\times(2^{31}-1)\mid......
  • 【小记】copy 与 copy_backward
    copy与copy_backwardcopy从前往后复制,result参数指向目标容器的begin位置copy*backward从后往前复制,···end位置Possibleimplementationtemplate<class......
  • 距离和最小
    #include<iostream>#include<algorithm>usingnamespacestd;intmain(){intn,place,i;cin>>n;inta[n];for(i=0;i<n;i++){cin......
  • 数论小记
    $[n=1]=\sum\limits_{d|n}\mu(d)$ 若:$F(n)=\sum\limits_{d|n}f(d)$则:$f(n)=\sum\limits_{d|n}\mu(d)F(\frac{n}{d})$ 若:$F(n)=\sum\limits_{n|d}f(d)$则:$f(n)......
  • Flexbox 的最小宽度和最大宽度声明在 Safari 上不起作用?为什么?
    要使弹性框在所有Web浏览器上运行,请使用flex的最小宽度和最大宽度等效值。例如,对于这个-<spanstyle="color:#000000">min-width:40%;max-width:40%;</span>使用CSS......
  • 最小生成树
    最小生成树定义生成树:一张n个点的连通图中,选择n-1条边与n个点组成的树最小生成树:即生成树中边权之和的最小者(可能存在多棵)P3366【模板】最小生成树Prim算法O(mlogm)......
  • 刷刷刷 Day 21 | 530. 二叉搜索树的最小绝对差
    530.二叉搜索树的最小绝对差LeetCode题目要求给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对......