当前位置: 代码迷 >> 综合 >> HDU - 2609 How many(最小表示法)
  详细解决方案

HDU - 2609 How many(最小表示法)

热度:96   发布时间:2023-11-25 07:17:18.0

HDU - 2609 How many(最小表示法)

#include<iostream>
#include<set>
using namespace std;
int get_min(string s,int n)
{
    int k=0,i=0,j=1;while(k<n&&i<n&&j<n){
    if(s[(i+k)%n]==s[(j+k)%n]) k++;else{
    if(s[(i+k)%n]>s[(j+k)%n]) i+=k+1;else j+=k+1;if(i==j) i++;k=0;}}return min(i,j);
}
int main()
{
    int n;while(cin>>n){
    set<string> st;while(n--){
    string s;cin>>s;int l=get_min(s,s.size());string ss=s.substr(l)+s.substr(0,l);st.insert(ss);}cout<<(int)st.size()<<endl;}return 0;
}