赤裸裸的最小表示。
/*
ID: modengd1
PROG: hidden
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <cstring>
#include <string.h>
using namespace std;
char input[200000];
int L;
int Min()
{
int i=0,j=1,k=0;
while(i<L&&j<L&&k<L)
{
if(input[i+k]==input[j+k])
k++;
else
{
if(input[i+k]>input[j+k])
if(i+k+1>j) i=i+k+1;
else i=j+1;
else
if(j+k+1>i) j=j+k+1;
else j=i+1;
k=0;
}
}
return min(i,j);
}
int main()
{
freopen("hidden.in","r",stdin);
freopen("hidden.out","w",stdout);
scanf("%d",&L);
getchar();
for(int i=0;i<L;i++)
{
scanf("%c",&input[i]);
if(i%72==71)
getchar();
}
memcpy(input+L,input,sizeof(char)*L);
cout<<Min()<<endl;
return 0;
}
原文:http://www.cnblogs.com/modengdubai/p/4903519.html