hdu2609最小表示法
2015-09-15 15:35
357 查看
#include <iostream> #include <algorithm> #include <string.h> #include <cstdio> #include <vector> using namespace std; const int maxn=10005; struct elem { char str[105]; int len; bool operator <(const elem &rhs)const{ return len<rhs.len||(len==rhs.len&&strcmp(str,rhs.str)<=0); } bool operator == (const elem &rhs)const{ return len==rhs.len&&strcmp(str,rhs.str)==0; } }P[maxn]; char s[105]; int MinRepresstation(char * S, int len ) { int i = 0, j = 1, k = 0; while(i < len && j < len) { k = 0; while(k < len && S[(i + k)%len] == S[(j + k)%len]) k++; if(k >= len) break; if(S[(i + k)%len] > S[(j + k)%len]) i = max(i + k + 1, j + 1); else j = max(i + 1, j + k + 1); } return min(i ,j); } int main() { int n; while(scanf("%d",&n)==1) { for(int i=0; i<n; i++) { scanf("%s",s); P[i].len=strlen(s); int d=MinRepresstation(s,P[i].len); for(int j=0;j<P[i].len; j++) P[i].str[j]=s[ (d+j)%P[i].len ]; P[i].str[P[i].len]=0; } sort(P,P+n); int num=unique(P,P+n)-P; printf("%d\n",num); } return 0; }
相关文章推荐
- 黑马程序员学习(四) 代码块、this、static
- SyntaxError: Non-ASCII character '\xe5'
- PHP接收客户端数据方式:post,HTTP_RAW_POST_DATA,input
- 网络请求框架---Volley
- (一)设计模式之单例模式
- Ubuntu 14.04 64位安装32位兼容包
- 帧缓冲对象FBO
- iOS runtime方法详解之添加类
- Vmware中运行起了多个个Vxworks
- IOS贝塞尔曲线圆形进度条和加载动画
- Druid原理介绍(2)
- ios 关于scrollview内空间位置与想象不符的解决办法
- adb shell dumpsys
- iOS网络监测如何区分2、3、4G?
- Netfilter的原理和实现浅析
- SSL双向认证原理以及期间证书的使用
- Linux下SSH用FTP命令上传文件至另一个FTP空间
- 2014 11.5 珠海 海鲜价格
- [问题] PHP接收Request payload传递过来的参数
- NSUserDefaults