hdu 2609 字符串最小表示法 虽然不是很懂 还是先贴上来吧。/,。/

还需要再消化一下这个算法。。 今天没有时间了,, 六级过了 就有大把时间 快活啊!
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<set>
using namespace std; int getmin(string s) { int n=s.size(); 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() { cin.sync_with_stdio(false); int t; while(cin>>t) { set<string> fuck; for(int i=1;i<=t;i++) { string ss; cin>>ss; int temp=getmin(ss); int len=ss.size(); string zz; int z=temp,ret; for(ret=0;ret<ss.size();ret++) { zz+=ss[z%len]; z++; } fuck.insert(zz); } cout<<fuck.size()<<endl; } return 0; }
原文地址:https://www.cnblogs.com/z1141000271/p/6024797.html