题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609

题意:给定n个循环链[串],问有多少个本质不同的链[串](如果一个循环链可以通过找一个起点使得和其他串相同,那么就认为这2个链是一样的。就是求不同构的串)

思路:对于求同构串可以用最小表示法,然后判断是否相等就可以知道这2个是否是同构了。判重用的是set

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
const int MAXN = 10000 + 5;
typedef long long int LL;
#define INF 0x3f3f3f3f
int MinRepresentation(char *s,int l){int i = 0, j = 1, k = 0;while (i < l&&j < l&&k < l){int li, lj;li = (i + k) >= l ? i + k - l : i + k;lj = (j + k) >= l ? j + k - l : j + k;if (s[li] == s[lj]){k++;}else{if (s[li]>s[lj]){i = i + k + 1;}else{j = j + k + 1;}if (i == j){j++;}k = 0;}}return i < j ? i : j;
}
char str[MAXN][105];
set<string>se;
int main()
{int n;while (~scanf("%d", &n)){se.clear();for (int i = 0; i < n; i++){scanf("%s", str[i]);int len = strlen(str[i]);int start = MinRepresentation(str[i], len);string minstr;for (int j = 0; j < len; j++){ //得到字典序最小的同构串minstr += str[i][(j + start) % len];}if (!se.count(minstr)){se.insert(minstr);}}printf("%d\n",se.size());}return 0;
}

转载于:https://www.cnblogs.com/kirito520/p/5607111.html

HDU 2609 最小表示法相关推荐

  1. hdu 2609 How many(最小表示法)

    题目链接:hdu 2609 How many 题意: 给你一些01串,a能通过循环到b的算一个种类,问有多少种串. 题解: 最小表示法板子题. 1 #include<bits/stdc++.h& ...

  2. HDU 4162 Shape Number(最小表示法)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4162 大意:原串通过相邻的数字相减得到的差或8减该差得到一个新串,然后输出新串(看成环)中字典序最小的 那 ...

  3. HDU 3374 最小 / 大表示法

    题意 传送门 HDU 3374 String Problem 题解 求字符串中字典序最小与最大的循环同构串,并求解对应的起始字符在原字符串中出现的位置最早的一个,以及这个循环同构串出现的次数. 最小/ ...

  4. HDU - 3374 String Problem(最小表示法+最大表示法+KMP的next数组)

    题目链接:点击查看 题目大意:给出一个字符串,现在问字符串不断向左循环所能形成的n个字符串中,字典序最小和最大的字符串的编号为多少,分别有多少个 题目分析:字符串最小表示法的模板题,证明和模板都是看大 ...

  5. HDU - 3374(最小表示法+最大表示法)

    hdu3374 题意: 给你一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串 题解: 利用最小 ...

  6. HDU - 2609 - How many

    先上题目: How many Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. 字符串循环同构的最小表示法(转)

    循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S'中字典序最小的一个. 由于语言能力有限,还是用实际例子来解释比较容易: 设S=bcad,且S'是S的循环同构的串 ...

  8. 2018.07.17 洛谷P1368 工艺(最小表示法)

    传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...

  9. poj1509最小表示法

    题意:       给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小. 思路:       最小表示法的建档应用,最小表示法很好理解,就点贪心的意思,一开始我们枚举两个起点i,j ...

  10. hdu3374最小表示法+KMP

    题意:       给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...

最新文章

  1. 怎么讲d 盘里的软件弄到桌面_教大家电脑怎么把e盘文件移到d位置
  2. 两个列表合并去重_把两个pdf合并成一个如何解决?
  3. Java和WebSocket开发网页聊天室
  4. (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题
  5. 从数据到模型:实现自动驾驶高效感知
  6. aws rds恢复数据库_使用AWS Glue将数据从AWS S3加载到AWS RDS SQL Server数据库
  7. dependency标签
  8. WordPress伪原创工具-更新网站一键伪原创发布软件
  9. 玩转Excel快捷键和常用函数和图表,赶紧学起来
  10. 溢出英语计算机,查看溢出(简述计算机溢出原理)
  11. 大图数据管理与分析技术(综述)
  12. 清理Git提交记录最简单的方法
  13. 股票跌得猝不及防,是因为你还不懂这个技术!
  14. 雾霾环保主题动态网站设计作业
  15. PHP CURL解决 此图片来自QQ微信公众平台,未经允许不可引用
  16. cant download je-7.4.5.jar with maven [ com.sleepycat:je:jar:7.4.5 ]
  17. 徇私舞弊不移交刑事案件罪
  18. php漏洞可以过去root,phpdisk 漏洞发布 phpdisk header bypass getShell exp解析
  19. 安固士科技的智慧工地AI视频监控系统如何成为建筑工地的必备措施?
  20. 什么是监控系统云台?

热门文章

  1. 关于STL allocator
  2. JQuery Mobile - 固定住页面和页脚
  3. 关于group by 两个或以上条件的分析
  4. IO 理论 SOCK理论
  5. 12864 显示多种图形
  6. request.getRequestDispatcher(url).forward(request, response)
  7. iOS中实现plist中读取数据实现Cell的显示(字典转模型,实现按序分组)修改图片的尺寸...
  8. 查看文章strncpy()功能更好的文章
  9. npm install 本地安装与全局安装
  10. 生活中的思维风暴——读《谁是谷歌想要的人才》精彩题目小记(二)