最小表示法(附上模板题,题解)

附上一道很好的模板题

最小表示法模板题

, 当然来搜最小表示法的你肯定不会用,所以下面有篇超级好的题解

超级好的模板题题解

我的模板

#include <bits/stdc++.h>
using namespace std;
const int maxn=3e5+10;
int n,a[maxn];
int run(int n)
{
	int i=0,j=1,k=0;
	while( i<n&&j<n )
	{
		k=0;
		while( a[(i+k)%n]==a[(j+k)%n] && k<n )	k++;
		if( k==n )	return min(i,j);
		if( a[(i+k)%n]>a[(j+k)%n] )	i=i+k+1;
		else	j=j+k+1;
		if( i==j )	j++;
	}
	return min(i,j);
}
int main()
{
	cin >> n;
	for(int i=0;i<n;i++)	cin >> a[i];
	int l= run(n);
	for(int i=0;i<n;i++)
	{
		int num=(i+l)%n;
		cout<<a[num]<<" ";
	}
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107440726
今日推荐