链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609
题目:
#include <bits/stdc++.h> using namespace std; const int maxn=110; int n; string s; map<string,int>mp; int getmin(int n){ int i=0,j=1,k=0,t; while(i<n && j<n && k<n){ t=s[(i+k)%n]-s[(j+k)%n]; 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(){ while(~scanf("%d",&n)){ mp.clear(); int ans=0; for(int i=1;i<=n;i++){ cin>>s; int len=s.length(); int k=getmin(len); string ss=""; for(int j=0;j<len;j++){ ss+=s[(k+j)%len]; } //cout<<ss<<endl; if(mp[ss]==0){ ans++; mp[ss]=1; } } printf("%d\n",ans); } return 0; }
原文:https://www.cnblogs.com/whdsunny/p/11324506.html