阿里天池的新任务(简单)(KMP统计子串出现的次数)
阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次。

输出格式
输出一个整数,为 tt 在 ss 中出现的次数。
样例说明
对于第一组样例,生成的 ss 为TTTCGGAAAGGCC。
样例输入1
13 2 5 4 9
AGG
样例输出1
1
样例输入2
103 51 0 40 60
ACTG
样例输出2
5
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; char s[];
int w1,w2;
char t[];
int nextt[]; void getnext(int lent)
{
int i=,j=-;
nextt[i]=-;
while(i<lent) {
if(j==-||t[i]==t[j]) {
nextt[++i]=++j;
}
else j=nextt[j];
}
} int kmp(int pos,int lent,int lens)
{
int i=pos,j=,ans=;
while(i<lens) {
if(s[i]==t[j]||j==-) ++i,++j;
else j=nextt[j];
if(j==lent) {
ans++;
j=nextt[j-];
i--;
}
}
return ans;
} int main()
{
int n,a,b,l,r;
scanf("%d %d %d %d %d",&n,&a,&b,&l,&r);
//scanf("%s",t);
cin>>t;
w1=b;
int cous=;
if(b>=l&&b<=r&&b%==){
s[cous++]='A';
}else if(b>=l&&b<=r&&b%==){
s[cous++]='T';
}else if(b<l&&b%==||b>r&&b%==){
s[cous++]='G';
}else if(b<l&&b%==||b>r&&b%==){
s[cous++]='C';
}
for(int i=;i<n;i++){
w2=w1+a;
w2%=n;
if(w2>=l&&w2<=r&&w2%==){
s[cous++]='A';
}else if(w2>=l&&w2<=r&&w2%==){
s[cous++]='T';
}else if(w2<l&&w2%==||w2>r&&w2%==){
s[cous++]='G';
}else if(w2<l&&w2%==||w2>r&&w2%==){
s[cous++]='C';
}
w1=w2;
}
int ans=;
int lens=strlen(s);
int lent=strlen(t);
getnext(lent);
ans=kmp(,lent,lens);
printf("%d\n",ans);
return ;
}
阿里天池的新任务(简单)(KMP统计子串出现的次数)的更多相关文章
- 计蒜客 阿里天池的新任务—简单( KMP水 )
链接:传送门 思路:KMP模板题,直接生成 S 串,然后匹配一下 P 串在 S 串出现的次数,注意处理嵌套的情况即可,嵌套的情况即 S = "aaaaaa" ,P = " ...
- 计蒜之道 初赛第一场B 阿里天池的新任务(简单)
阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displ ...
- poj 3461 Oulipo(kmp统计子串出现次数)
题意:统计子串出现在主串中的次数 思路:典型kmp #include<iostream> #include<stdio.h> #include<string.h> ...
- 2017 计蒜之道 初赛 第一场 B阿里天池的新任务(简单)
题链:"https://nanti.jisuanke.com/t/15500" 本来希望通过找循环节然后套KMP来通过后面题的,可是只过了B题,可能循环节不一定是存在的. #inc ...
- Loj 103、10043 (KMP统计子串个数)
KMP算法学习链接:https://blog.csdn.net/starstar1992/article/details/54913261/ KMP算法:可以实现复杂度为O(m+n) 为何简化了时间复 ...
- POJ 3461 Oulipo 【KMP统计子串数】
传送门:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submission ...
- hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1686 Oulipo【kmp求子串出现的次数】
The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...
- 统计子串数量,Python基础
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:陈YL PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
随机推荐
- django之MTV模型(urls,view)
今天就进入到python最重要的阶段了django框架,框架就像胶水一样会将我们前面学的所有知识点粘合在一起,所以以前有哪些部分模糊的可以看看前面的随笔.本篇主要介绍djangoMTV模型,视图层之路 ...
- [web 前端] css3 transform方法常用属性
cp from : https://www.cnblogs.com/chrxc/p/5126569.html css3中transform方法是一个功能强大的属性,可以对元素进行移动.缩放.转动.拉长 ...
- I2C总线协议图解
原帖地址:https://www.cnblogs.com/aaronLinux/p/6218660.html
- qt5信息提示框QMessageBox用法
information QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes ...
- ArcGIS鼠标滚轮方向之代码篇
Desktop10.X有多个版本,不同版本的注册表路径不一致,注册表中可能残留多个版本的注册信息:也可能没有Desktop,而是Engine.其实可以通过RuntimeManager.ActiveRu ...
- jQuery数据转换与提交
json2.js序列化,即JSON对象转换成String字符串: JSON.stringify({ id: 1, name: 'jsons' }); 反序列化,即String转JSON对象: JSON ...
- Jenkins安装卸载
下载安装去Jenkins官网下载Jenkins,Centos的话会下载到.rpm安装文件 安装.rpm文件使用命令rpm -ivh **.rpm 安装完成之后使用命令rpm -qc jenkins查看 ...
- 微信小程序tab切换,可滑动切换,导航栏跟随滚动实现
简介 看到今日头条小程序页面可以滑动切换,而且tab导航条也会跟着滚动,点击tab导航,页面滑动,切导航栏也会跟着滚动,就想着要怎么实现这个功能 像商城类商品类目如果做成左右滑动切换类目用户体验应该会 ...
- xcode10 改动
xcode10 开发环境 比 之前有了稍微的变动 1. 代码块 界面控件 图片资源等 的查看位置发生了变化 之前的开发环境 代码块 统一放在 右侧栏的下方的几个选项中 现在 统一放到了上方 ...
- eclipse工具中使用Data Source Explorer连接数据库(MySQL)
1.进入Eclipse工具,打开Data Source Explorer.Window==>Show View==>Data Source Explorer(注:如果找不到请选择Other ...
