1282 时钟(最小表示法+hash)】的更多相关文章

1282 时钟 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N个时钟,每个时钟有M个指针,P个刻度.时钟是圆形的,P个刻度均分整个圆.每个时钟每个指针指向整数刻度,并且每个时钟自身指针指向的数字都不同.你可以任意旋转时钟的表盘,但是你不能转指针.问最后有多少对时钟可以变成相同的状态.   例如:N = 5,M = 2,P = 4,5个时钟的数据如下{1, 2} {2, 4} {4, 3} {2, 3} {1, 3}    …
题目链接:https://vjudge.net/problem/51Nod-1282 1282 时钟 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   有N个时钟,每个时钟有M个指针,P个刻度.时钟是圆形的,P个刻度均分整个圆.每个时钟每个指针指向整数刻度,并且每个时钟自身指针指向的数字都不同.你可以任意旋转时钟的表盘,但是你不能转指针.问最后有多少对时钟可以变成相同的状态. 例如:N = 5,M = 2,P = 4,5个时钟的…
题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根.相当于每个串对应一个有根的树.然后让你判断2个串构成的树是否是同构的. 思路:首先根据01串构造出树,然后求树的最小表示法判断同构. 详情参照:https://www.byvoid.com/blog/directed-tree-bracket-sequence/ #define _CRT_SECURE_NO_DEPRECATE #include<iostream>…
How many Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4210    Accepted Submission(s): 1936 Problem Description Give you n ( n < 10000) necklaces ,the length of necklace will not large than 10…
LINK:模板 树同构 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构. 由于时无根的 所以一个比较显然的想法暴力枚举根. 然后做树hash或者树的最小表示法. 前者做一次时n^2logn的 而后者则是严格的n^2logn的. 这样加上暴力枚举根就是n^3logn了. 最后我们将这些东西再sort一下和其他的树做对比 如果所有的都完全一致那么说明时同构的. 算法正确性 首先完全一样的树 再做树hash或者最小表示法时 得到的东西必然一样. 这个可以利用递…
1282 时钟  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N个时钟,每个时钟有M个指针,P个刻度.时钟是圆形的,P个刻度均分整个圆.每个时钟每个指针指向整数刻度,并且每个时钟自身指针指向的数字都不同.你可以任意旋转时钟的表盘,但是你不能转指针.问最后有多少对时钟可以变成相同的状态. 例如:N = 5,M = 2,P = 4,5个时钟的数据如下{1, 2} {2, 4} {4, 3} {2, 3} {1,…
开始按hash做的 交上去就wa 但是和标称拍了半天也没有不一样的 可能是生成的数据太水了吧... #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 #define mod 10000007 #define ll long long using namespace std; ll ha; ],]; ]; int init() { ,f=;char s=getchar();…
4337: BJOI2015 树的同构 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1023  Solved: 436[Submit][Status][Discuss] Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如果能够把树T1的所有点重新标号,使得树T1和树T2完全相 同,那么这两个树是同…
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1282 题意:中文题目诶- 思路:指针不可转,刻盘可转,显然,对于两组指针,当且仅当它们所有对应相邻指针间距都相等时是满足题意的: 先得到指针间距,因为刻盘可转,相当于循环数组,可以先求一下最小表示法,然后再两两枚举所有情况,对于最小表示法相同的两组指针,计数加一: 代码: #include <iostream> #include <algorithm&…
亲手写掉的第一道最小表示法!哈哈哈太开心啦~ 不同于以往的几个插头\(dp\),这个题目的轮廓线是周围的一圈\(n\)个格子.而其所谓"插头"也变成了相邻格子的所属连通分量编号,并不是直接把前面几个题的思想往上套就可以轻松解决的了.这里我们就要采用一种叫最小表示法的东西来表示它的连通性信息啦~ (其实感觉是不是称之为逐格递推的轮廓线\(dp\)比较好... 而最小表示法是什么呢?举个例子,现在有这样一个序列\((5,5,3,2,4,1,3,2)\),序列中的每一个数代表第\(i\)个格…