luogu P1368 工艺 /【模板】最小表示法

最小表示法模板题:

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

const int N=300009;
int n,a[N];

void init()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%d",&a[i]);
}

int t(int x) { return x==n?x:x%n; }

void work()
{
	int i=1,j=2,k=0;
	while(i<=n&&j<=n&&k<n)
	{
		if(a[t(i+k)]==a[t(j+k)])
			k++;
		else
		{
			if(a[t(i+k)]>a[t(j+k)]) i=i+k+1;
			else j=j+k+1;
			k=0;
			if(i==j) i++;
		}
	}
	i=min(i,j);
	for (int j=i;j<=n;j++)
		printf("%d ",a[j]);
	for (int j=1;j<i;j++)
		printf("%d ",a[j]);puts("");
}

int main()
{
	init();
	work();
	return 0;
}
posted @ 2020-07-30 13:23  With_penguin  阅读(120)  评论(0编辑  收藏  举报