KMP与循环节相关题目
HDU 3746 Cyclic Nacklace ( KMP求最小循环节 )
len - nextval[len]即为最小循环节长度。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> using namespace std; const int MAXN = ;
const int INF = << ; char str[MAXN];
int nextval[MAXN];
int len; void getNext( char s[], int next[] )
{
int length=len;
int i=,j=-;
next[]=-;
while(i<length)
{
if(j==-||s[i]==s[j])
{
++i;
++j;
next[i]=j;
}
else
j=next[j];
}
} int main()
{
int T;
scanf( "%d", &T );
while ( T-- )
{
scanf( "%s", str );
len = strlen(str);
getNext( str, nextval );
int sub = len - nextval[len];
if ( sub != len && len % sub == ) puts("");
else printf( "%d\n", sub - ( nextval[len]%sub ) );
}
return ;
}
HDU 1358 Period
题意:若某串的前i个字符是循环串,输出i以及循环节出现的次数。
做法跟上一题差不多
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> using namespace std; const int MAXN = ; char str[MAXN];
int nextval[MAXN];
int len; void getNext( char s[], int next[] )
{
int length=len;
int i=,j=-;
next[]=-;
while(i<length)
{
if(j==-||s[i]==s[j])
{
++i;
++j;
next[i]=j;
}
else
j=next[j];
}
} int main()
{
int cas = ;
while ( scanf( "%d", &len ), len )
{
scanf( "%s", str );
getNext( str, nextval );
printf( "Test case #%d\n", ++cas );
for ( int i = ; i <= len; ++i )
{
int sub = i - nextval[i];
if ( i / sub > && i % sub == )
{
printf("%d %d\n", i, i / sub );
}
}
puts("");
}
return ;
}
POJ 2406 Power Strings(求循环串的最大循环周期)
注意这组数据:aabaabaa
显然答案是:1
#include <cstdio>
#include <cstring>
#include <cstdlib> const int MAXN = ; char str[MAXN];
int nextval[MAXN];
int len; void getNext(char s[],int next[])
{
int length=len;
int i=,j=-;
next[]=-;
while(i<length)
{
if(j==-||s[i]==s[j])
{
++i;
++j;
next[i]=j;
}
else
j=next[j];
}
} int main()
{
while ( scanf( "%s", str ) == && str[] != '.' )
{
len = strlen(str);
getNext( str, nextval );
int sub = len - nextval[len];
if ( len % sub == ) printf("%d\n", len / sub );
else printf("1\n");
}
return ;
}
KMP与循环节相关题目的更多相关文章
- HDU 3746 Cyclic Nacklace (KMP求循环节问题)
		
<题目链接> 题目大意: 给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数. [>>>kmp next函数 kmp的周期问题] #include &l ...
 - KMP解决字符串最小循环节相关问题
		
经典问题 : 给出一个由某个循环节构成的字符串,要你找出最小的循环节,例如 abababab 最小循环节当是 ab ,而类似 abab 也可以成为它的循环节,但并非最短. 分析 : 对于上述问题有两个 ...
 - HDU 1358 Period (kmp求循环节)(经典)
		
<题目链接> 题目大意: 意思是,从第1个字母到第2字母组成的字符串可由某一周期性的字串(“a”) 的两次组成,也就是aa有两个a组成: 第三行自然就是aabaab可有两个aab组成: 第 ...
 - HDU 1358 Period(KMP+最小循环节)题解
		
思路: 这里只要注意一点,就是失配值和前后缀匹配值的区别,不懂的可以看看这里,这题因为对子串也要判定,所以用前后缀匹配值,其他的按照最小循环节做 代码: #include<iostream> ...
 - HDU 3746 Cyclic Nacklace(KMP+最小循环节)题解
		
思路: 最小循环节的解释在这里,有人证明了那么就很好计算了 之前对KMP了解不是很深啊,就很容易做错,特别是对fail的理解 注意一下这里getFail的不同含义 代码: #include<io ...
 - 用KMP征服循环节问题
		
以前我还是写过KMP的文章的 现在我们可以求一下循环节啊 Slot Machines Gym - 101667I #include<bits/stdc++.h> using namespa ...
 - HDU - 3374 String Problem (kmp求循环节+最大最小表示法)
		
做一个高产的菜鸡 传送门:HDU - 3374 题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数. 题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数. ...
 - (KMP 根据循环节来计算)Period -- hdu -- 1358
		
http://acm.hdu.edu.cn/showproblem.php?pid=1358 Period Time Limit: 2000/1000 MS (Java/Others) Memo ...
 - ( KMP  求循环节的个数)Power Strings -- poj -- 2406
		
链接: http://poj.org/problem?id=2406 Power Strings Time Limit:3000MS Memory Limit:65536KB 64bi ...
 
随机推荐
- N76E003---看门狗
			
看门狗的设置 比较简单,根据芯片手册上的说明进行设置.值得一提的是设置看门狗的寄存器是保护寄存器,所以在写寄存器的时候要解除保护 void wtd_init(void) { TA=0xAA; TA=0 ...
 - P3740 贴海报
			
P3740 贴海报 很显然,这个题是让我们维护一个区间的信息 可以考虑线段树.可是这个题,正向思维可能并不可做. 所以我们考虑逆向思维. 打个比方,你是一名保洁人员.面对已经粘在墙上的,大大小小的广告 ...
 - caffe中各种cblas的函数使用总结
			
转来的,来自:http://www.cnblogs.com/huashiyiqike/p/3886670.html 总结的很赞,转到这里,留一下笔记.感觉cblas的函数名字很好记的,试着去找过源代码 ...
 - MySQL为何不建议使用null列
			
Preface Null is a special constraint of columns.The columns in table will be added null cons ...
 - js字节转换、字节格式化函数
			
有时候在上传附件后需要显示大小,可以选择在后台处理,也可以在前台用js处理. 比如我们想1024MB转换成1GB,那就需要进行转换,这里只是介绍用js进行转换. function bytesToSiz ...
 - linux防火墙的管理和策略控制
			
iptables 一:IPtables防火墙的简介 IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统.如果 Linux 系统连接到因特网或 LAN.服务器或连接 ...
 - PHP生成特定长度的纯字母字符串
			
PHP中,md5().uniqid()函数可以返回32位和13位不重复的字符串,但是这些字符串都可能包含有数字.如果需要纯字母的字符串,而且长度不定,比如8位,那么直接用这两个函数无法达到效果. 这时 ...
 - select into from 和 insert into select
			
select into from 和 insert into select都是用来复制表, 两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建. inser ...
 - C++ 基础 引用
			
1.引用的本质 int b = 10; int &a = b; 等效于: int * const a = &b; 由于 a 是 const声明,所以一旦定义无法修改,所以要在定义时就要 ...
 - HDU 6274 二分+预处理(CCPC K题
			
#include"bits/stdc++.h" #define db double #define ll long long #define vec vector<ll> ...