usaco Hidden Password
赤裸裸的最小表示。
/* 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; }