标签:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <set> using namespace std; const int maxn = 1e4 + 10; char s[maxn][110]; int len; set<string> st; int GetMin(int id) { int i = 0, j = 1, k = 0; while(i < len && j < len && k < len) { int t = s[id][(i + k) % len] - s[id][(j + k) % len]; if(!t) k++; else { if(t < 0) j = j + k + 1; else i = i + k + 1; if(i == j) j++; k = 0; } } return min(i, j); } /*int getMax() { int i = 0, j = 1, k = 0; while(i < len && j < len && k < len) { int t = s[(i + k) % len] - s[(j + k) % len]; if(!t) k++; else { if(t > 0) j = j + k + 1; else i = i + k + 1; if(i == j) j++; k = 0; } } return min(i, j); }*/ int main() { int n; while(~scanf("%d", &n)) { st.clear(); for(int i = 1; i <= n; i++) { scanf("%s", s[i]); } for(int i = 1; i <= n; i++) { string tmp; len = strlen(s[i]); int Min = GetMin(i); for(int j = 0; j < len; j++) { tmp += s[i][(Min + j) % len]; } //if(!st[tmp]) st.insert(tmp); } cout << st.size() << endl; } }
标签:
原文地址:http://www.cnblogs.com/lonewanderer/p/5648093.html