题目大意:求循环同构的字符串的最小字典序。
解题关键:最小表示法模板题。
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<cmath> #include<iostream> using namespace std; typedef long long ll; char s[11000]; int get_min(char *s){ int len=strlen(s); int i=0,j=1,k=0,t; while(i<len&&j<len&&k<len){ t=s[(i+k)%len]-s[(j+k)%len]; if(!t)k++; else{ if(t>0) i+=k+1; else j+=k+1; if(i==j) j++; k=0; } } return i<j?i:j; } int main(){ int n,t; scanf("%d",&t); while(t--){ scanf("%s",s); printf("%d ",get_min(s)+1); } return 0; }