题目链接:poj 3693 Maximum repetition substring
题目大意:求一个字符串中循环子串次数最多的子串。
解题思路:对字符串构建后缀数组,然后枚举循环长度,分区间确定。对于一个长度l,每次求出i和i+l的LCP,那么以i为起点,循环子串长度为l的子串的循环次数为LCP/l+1,然后再考虑一下从i-l+1~i之间有没有存在增长的可能性。
#include ...
分类:
其他好文 时间:
2014-09-05 23:53:12
阅读次数:
412
题目链接:uva 10601 - Cubes
题目大意:有12根等长的小木棍,然后每根木棍,输入每根木棍颜色的编号,你的任务是统计出用它们拼出多少种不同的立方体,旋转之后完全相同的立方体被认定相同。
解题思路:polya,然后对应立方体有24种旋转:
不旋转(still):1种,循环长度为12以对顶点为轴(rot_point):4组,循环长度为3以对面中心为轴(rot_plane...
分类:
其他好文 时间:
2014-08-14 01:32:57
阅读次数:
262
题目链接:uva 12103 - Leonardo's Notebook
题目大意:给出26个字母的置换,问是否存在一个置换A,使得A2=B
解题思路:将给定置换分解成若干个不相干的循环,当循环的长度n为奇数时,可以由两个循环长度为n的循环的乘积得来,也可以由两个循环长度为2n的拆分而来;对于长度n为偶数的,只能由两个循环长度为2n的拆分而来,所以判断是否存在有循环长度为偶数的个数是奇...
分类:
其他好文 时间:
2014-08-13 13:13:56
阅读次数:
231
题目链接:uva 11077 - Find the Permutations
题目大意:给定一个1~n的排序,可以通过一系列的交换变成1,2,…,n,
给定n和k,统计有多少个排列至少需要交换k次才能变成有序的序列。
解题思路:给定一个序列P,可以将该序列看做是一个置换,从有序序列,开始,需要多少次回到有序序列。将P的循环分解,循环长度为1的需要0次,长度为2的需要1次,循环长度为...
分类:
其他好文 时间:
2014-08-13 13:11:16
阅读次数:
275
题目链接:uva 1156 - Pixel Shuffle
题目大意:给定一个N*N的黑白位图,有7种操作,并且对应在指令后加上‘-’即为操作的逆,给定N和一系列操作,(从最后一个开始执行),问说这一套指令需要执行多少次才能形成循环。
解题思路:模拟指令执行后获得一个置换,分解成若干的循环,各个循环长度的最小公倍数即使答案。
#include
#include
#include ...
分类:
其他好文 时间:
2014-08-13 13:10:16
阅读次数:
268
UVA 11330 - Andy's Shoes
题目链接
题意:andy有很多双鞋子,每双鞋子有一个编号,现在他把鞋子左右左右放回去,可是不能保证所有鞋子左边和右边是同一编号,现在要求用最少的交换次数,使得所有鞋子左右编号相同
思路:置换的分解,固定左边的鞋子,这样右边的鞋子就可以看成是放在哪个位置,然后根据这个求出每个循环的长度,最后每个循环长度-1的总和就是答案
代码...
分类:
其他好文 时间:
2014-08-08 18:19:47
阅读次数:
256
UVA 1328 - Period
题目链接
题意:给定一个字符串,求出有几个位置的前缀串是由个数大于1的串循环得到的,求出位置和循环次数
思路:利用kmp的next数组的性质,i - next[i]就是循环长度,然后判断一下是不是正好是倍数即可
代码:
#include
#include
const int N = 1000005;
int n, next[...
分类:
其他好文 时间:
2014-08-01 13:49:11
阅读次数:
171
题目来源:http://poj.org/problem?id=2406主要考察KMP算法中next数组的性质,根据next[len]可以知道前len-1字符串最长前缀和后缀的循环长度那么len-next[len]即为一个循环单位的长度,倘若循环单位len-next[len]不是len的整数倍,则an...
分类:
其他好文 时间:
2014-07-29 17:07:22
阅读次数:
168
题意:求给定字符串最大循环次数
思路:根据KMP算法的next数组知,一个长度为n的字符串,
if(n%(n-next[n])==0)
最小循环长度为 L=n-next[n];
最大循环次数为 S=n/L=n/(n-next[n]);...
分类:
其他好文 时间:
2014-07-26 15:28:52
阅读次数:
182
UVA 1156 - Pixel Shuffle
题目链接
题意:根据题目中的变换方式,给定一串变换方式,问需要执行几次才能回复原图像
思路:这题恶心的一比,先模拟求出一次变换后的对应的矩阵,然后对该矩阵求出所有循环长度,所有循环长度的公倍数就是答案
代码:
#include
#include
const int N = 1100;
int t, n, g[N]...
分类:
其他好文 时间:
2014-07-19 08:15:10
阅读次数:
307