51nod1282(最小表示法&&枚举)】的更多相关文章

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1282 题意:中文题目诶- 思路:指针不可转,刻盘可转,显然,对于两组指针,当且仅当它们所有对应相邻指针间距都相等时是满足题意的: 先得到指针间距,因为刻盘可转,相当于循环数组,可以先求一下最小表示法,然后再两两枚举所有情况,对于最小表示法相同的两组指针,计数加一: 代码: #include <iostream> #include <algorithm&…
给你一个n*m的字符矩阵,将横向(或纵向)全部裂开,然后以任意顺序首尾相接,然后再从中间任意位置切开,问你能构成的字典序最大的字符串. 以横向切开为例,纵向类似. 将所有横排从大到小排序,枚举最后切开的位置在哪一横排,将这一排提到排序后的字符串数组最前面,求个“最大表示法”,如果最大表示法的位置恰好在第一排的位置,那么可以用来更新答案. 如果不在第一排的位置,那么其所构成的仍然是合法的串,而且一定不会影响答案. 这是一个最小表示法的板子. #include<cstdio> #include&l…
String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1512    Accepted Submission(s): 668 Problem Description Give you a string with length N, you can generate N strings by left shifts…
题意:给你一个n*n的01矩阵,让你把最少的0变成1,使得每个元素的上,下,左,右的元素(如果有的话)之和均为偶数. 析:最好想的的办法就是暴力,就是枚举每个数字是变还是不变,但是...时间复杂度也太高了吧,2的225次方哪, 绝对超64位了,跑到猴年马月才到结束,很明显不现实.仔细想一下,n=15,是最大了,如果枚举第一行,还是可以的, 所以第一行是可以枚举的,再想一下,通过第一行,是不是可以把二行也给确定出来,是的,可以,想一下,比如第一行的, 我们确定好了,那么第一行的上下左右必须是偶数,…
题目链接:https://vjudge.net/problem/51Nod-1282 1282 时钟 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   有N个时钟,每个时钟有M个指针,P个刻度.时钟是圆形的,P个刻度均分整个圆.每个时钟每个指针指向整数刻度,并且每个时钟自身指针指向的数字都不同.你可以任意旋转时钟的表盘,但是你不能转指针.问最后有多少对时钟可以变成相同的状态. 例如:N = 5,M = 2,P = 4,5个时钟的…
Tree nesting (CF762F) Description 有两个树 S.T,问 S 中有多少个互不相同的连通子图与 T 同构.由于答案 可能会很大,请输出答案模 1000000007 后的值. 两个连通子图 P.Q 称为互不相同的,当且仅当存在一个点 v∈S,使得 v∈P 与 v∈Q 恰好有一个成立. 图 G 与 H(在此题中 G 与 H 均为树)同构的定义为,存在一个一一映射 f, G 中任意一点 u 在 H 中都有唯一的点 v 与之对应:同样对 H 中任意一点 v 也有唯 一的在…
传送门:https://ac.nowcoder.com/acm/contest/887/A 题意:大意就是给你一个只含有0和1的字符串,找出一种分割方法,使得每个分割出的字符串都是在该字符串自循环节中最小 思路: 一: 最小表示法的模板题了,数据范围比较小.每次枚举字符串的最长长度,用最小表示法进行判断即可. 最小表示法的介绍:https://oi-wiki.org/string/minimal-string/ 代码: #include<bits/stdc++.h> using namespa…
LINK:模板 树同构 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构. 由于时无根的 所以一个比较显然的想法暴力枚举根. 然后做树hash或者树的最小表示法. 前者做一次时n^2logn的 而后者则是严格的n^2logn的. 这样加上暴力枚举根就是n^3logn了. 最后我们将这些东西再sort一下和其他的树做对比 如果所有的都完全一致那么说明时同构的. 算法正确性 首先完全一样的树 再做树hash或者最小表示法时 得到的东西必然一样. 这个可以利用递…
题意:       给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小. 思路:       最小表示法的建档应用,最小表示法很好理解,就点贪心的意思,一开始我们枚举两个起点i,j然后谁大谁往后移动,相等则比较下一个,这样到最后取一个小的值就行了,时间复杂度是O(n)的,很好的小方法. #include<stdio.h> #include<string.h> char str[10005]; int GetMin(char *str) { int len = s…
bzoj5130 字符串的周期(kmp,最小表示法) bzoj 题解时间 m很大,n很小. 周期很容易求,就是kmp之后n-fail[n]. 之后对于枚举所有的字符串用最小表示法,暴力搜索. 能过就完事了. #include<bits/stdc++.h> using namespace std; typedef long long lint; struct pat{int x,y;pat(int x=0,int y=0):x(x),y(y){}bool operator<(const p…