最小表示法
最小表示法
感觉这是一个很冷门的算法?
遇到的题不多,但是很有趣。
什么是最小表示法
用来求一个字符串或数列,循环得到的串或数列,字典序最小的是哪个。
如何求最小表示法
- 定义两个指针
和 ,初始时指向 和 。 - 维护一个
,表示 开头的子串和 开头的子串,现在的前 位是相同的。 - 比较第
位,如果依然相等就 。 - 否则假设更大的那个子串,从它的头指针位置到现在的第
位开头的子串,一定也大于更小的那个子串从它的头指针位置到现在的第 位开头的子串,所以大的那个跳到现在的第 位,并重新匹配。(有点像绕口令.....) - 如果指针跳的时候
了,那么令其中一个再向后跳。
Code
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int n,p,a[N];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
int i=0,j=1,k=0;
while(i<n&&j<n&&k<n)
{
if(a[(i+k)%n]>a[(j+k)%n])i=i+k+1,k=0;
else if(a[(i+k)%n]<a[(j+k)%n])j=j+k+1,k=0;
else k++;
if(i==j)i++;
}
p=min(i,j);
for(int i=0;i<n;i++)printf("%d ",a[(p+i)%n]);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!