首页 > 其他 > 详细

hdu 2609 How many(最小表示法)

时间:2017-07-06 21:17:21      阅读:333      评论:0      收藏:0      [点我收藏+]

题目链接:hdu 2609 How many

题意:

给你一些01串,a能通过循环到b的算一个种类,问有多少种串。

题解:

最小表示法板子题。

技术分享
 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=(a);i<=(b);++i)
 3 using namespace std;
 4 //s从0开始,返回最小表示的开始位置
 5 int find_min(char *s,int len){
 6     int i=0,j=1,k=0,t;
 7     while(i<len&&j<len&&k<len){
 8         t=s[(i+k)>=len?i+k-len:i+k]-s[(j+k)>=len?j+k-len:j+k];
 9         if(!t)k++;
10         else{
11             if(t>0)i+=k+1;else j+=k+1;
12             j+=i==j,k=0;
13         }
14     }
15     return (i<j?i:j);
16 }
17 
18 int n,len;
19 char s[10001],tmp[10001];
20 set<string>cnt;
21 
22 int main()
23 {
24     while(~scanf("%d",&n))
25     {
26         cnt.clear();
27         F(i,1,n)
28         {
29             scanf("%s",s);
30             len=strlen(s);
31             int mi=find_min(s,len);
32             for(int i=0,ed=mi;i<len;i++,ed=(ed+1)%len)tmp[i]=s[ed];
33             cnt.insert(tmp);
34         }
35         printf("%d\n",cnt.size());
36     }
37     return 0;
38 }
View Code

 

hdu 2609 How many(最小表示法)

原文:http://www.cnblogs.com/bin-gege/p/7128341.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!