hdu2609(hash+STL+字典树)
来源:互联网 发布:linux手动添加用户 编辑:程序博客网 时间:2024/06/05 08:46
How many
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1040 Accepted Submission(s): 406
Problem Description
Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me
How many kinds of necklaces total have.(if two necklaces can equal by rotating ,we say the two necklaces are some).
For example 0110 express a necklace, you can rotate it. 0110 -> 1100 -> 1001 -> 0011->0110.
How many kinds of necklaces total have.(if two necklaces can equal by rotating ,we say the two necklaces are some).
For example 0110 express a necklace, you can rotate it. 0110 -> 1100 -> 1001 -> 0011->0110.
Input
The input contains multiple test cases.
Each test case include: first one integers n. (2<=n<=10000)
Next n lines follow. Each line has a equal length character string. (string only include '0','1').
Each test case include: first one integers n. (2<=n<=10000)
Next n lines follow. Each line has a equal length character string. (string only include '0','1').
Output
For each test case output a integer , how many different necklaces.
Sample Input
4011011001001001141010010110000001
Sample Output
12
Author
yifenfei
Source
奋斗的年代
Recommend
yifenfei
本题要求不同构的字符串的个数。
两个字符串同构是指其中一个可以仅经过循环移位得到另外一个。而同构可以用最小表示法来解决。
每读入一个字符串,就找到它的最小表示形式;在判断该最小表示形式是否已经出现过:若没有则计数器加1,并将该最小表示形式存储起来;若有则直接处理下一个。最终计数器即为所求。判断是否出现过可以hash表,但字符串的hash表不好维护,可以考虑用字典树判重或用STL中的set容器。
#include<iostream>#include<set>#include<string>using namespace std;//返回母串的最小子串的起始位置int minpresent(string &str){int i,j,k,len=str.size();i=0,j=1,k=0;while(i<len&&j<len&&k<len){if(str[(i+k)%len]==str[(j+k)%len])k++;else {if(str[(i+k)%len]>str[(j+k)%len])i=i+k+1; else j=j+k+1;if(i==j)j++;k=0;}}return ++i<++j?i:j;}int main(){int n,i,Minid,ans;bool flag;string tmp,str;set<string>Set;while(~scanf("%d",&n)){Set.clear();ans=0;for(i=0;i<n;i++){cin>>tmp;Minid=minpresent(tmp)-1;str.assign(tmp,Minid,tmp.size()-Minid);if(Minid)str.append(tmp,0,Minid);if(!Set.count(str)){ans++;Set.insert(str);}}printf("%d\n",ans);}return 0;}
- hdu2609(hash+STL+字典树)
- hdu2609
- 最小表示法+hash hdu2609 How many
- NkOJ2218(字典树+STL)
- hdu1251 hash或者字典树
- hdu1247 字典树或者hash
- hdu 1800 字典树或Hash
- 魔咒词典 字典树 hash map
- Hdu 4287 Intelligent IME 字典树 Hash
- CF 514C hash,字典树
- 字典树,HDU 1251 hash前缀
- STL --字典树-- Message Flood-----map
- hdu2072-单词数 字典树、STL
- Hash树(散列树)和Trie树(字典树、前缀树)
- POJ 2513 Colored Sticks 字典树hash 欧拉路径
- poj 2503 Babelfish(hash or 字典树)
- POJ 2408 Anagram Groups(字典树hash)
- 字典树 hash(代替map的映射) PKU2513
- Ubuntu 12.04 部署 Git build Server
- Protection 1
- Flex应用程序的系统开发周期
- C6000系列DSP的中断系统
- 初学python class 注意构造函数__init__(self)
- hdu2609(hash+STL+字典树)
- 【Error】Call requires API level 3 (current min is 1)解决办法
- Android Apps开发环境搭建
- C6000系列DSP的GPIO模块
- struts2中的json
- asp.net一般处理程序(1)准备工作
- hdu 1035(简洁版)
- __bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
- cloudfoundry的部署成功后的笔记