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;
}
由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!