阿里天池的新任务(简单)(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学习资料的小伙伴可以加点击下方链接自 ...
随机推荐
- 附近有什么?8款可以查周边的App
如今科技发达的时代,手机的功能不仅仅只是能通讯聊天,而是逐渐的走进了人们的生活中.因为有了APP,我们的生活才更丰富,并且有很多是我们生活中不可缺少的软件,而这些软件便是根据手机中的GPS定位系统而来 ...
- 用R语言分析与预測员工离职
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/83542978 https://mmbiz.qpic ...
- NLP第9章 NLP 中用到的机器学习算法——基于统计学(文本分类和文本聚类)
- ESP-EYE V2.1 开发板 WINDOWS 10 开发入门
准备工作 1 × ESP-EYE V2.1 开发板 1 × Micro USB B 电缆 1 × PC(Windows10) 简介 ESP-EYE 是一款面向人脸识别和语音识别市场的开发板,搭载 ES ...
- centos exfat格式U盘不支持问题
centos exfat格式U盘不支持问题 1. 下载fuse-exfat-1.3.0-1.el7.x86_64.rpm 2. 终端安装 rpm -ivh fuse-exfat-1.3.0-1.el ...
- 微信支付 python版
需求: 微信打开商品列表页面-> 点击商品后直接显示付款页面-> 点击付款调用微信支付 说明 微信支付需要你申请了公众号(appid, key - 用于签名), 商户号(mch_id, A ...
- ionic 视图滚动到顶部
问题描述 进入页面, 滚动到底部 点击一个连接, 当前视图内容更新了 内容滚动到了上次的位置导致底部的内容没显示 需要控制自动回滚到顶部 <ion-content delegate-handle ...
- 每天一个linux命令:du
1.命令简介 du (Disk usage) 用来计算每个文件的磁盘用量,目录则取总用量. 2.用法 用法:du [选项]... [文件]... 或:du [选项]... --files0-from= ...
- [docker]通过阿里云源安装docker && flannel不通问题解决(try this guy out)
docker清理容器 # 容器停止后就自动删除: docker run --rm centos /bin/echo "One"; # 杀死所有正在运行的容器: docker kil ...
- Redux 入门到高级教程
Redux 是 JavaScript 状态容器,提供可预测化的状态管理. (如果你需要一个 WordPress 框架,请查看 Redux Framework.) Redux 除了和 React 一起用 ...
