阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 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统计子串出现的次数)的更多相关文章

  1. 计蒜客 阿里天池的新任务—简单( KMP水 )

    链接:传送门 思路:KMP模板题,直接生成 S 串,然后匹配一下 P 串在 S 串出现的次数,注意处理嵌套的情况即可,嵌套的情况即 S = "aaaaaa" ,P = " ...

  2. 计蒜之道 初赛第一场B 阿里天池的新任务(简单)

    阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displ ...

  3. poj 3461 Oulipo(kmp统计子串出现次数)

    题意:统计子串出现在主串中的次数 思路:典型kmp #include<iostream> #include<stdio.h> #include<string.h> ...

  4. 2017 计蒜之道 初赛 第一场 B阿里天池的新任务(简单)

    题链:"https://nanti.jisuanke.com/t/15500" 本来希望通过找循环节然后套KMP来通过后面题的,可是只过了B题,可能循环节不一定是存在的. #inc ...

  5. Loj 103、10043 (KMP统计子串个数)

    KMP算法学习链接:https://blog.csdn.net/starstar1992/article/details/54913261/ KMP算法:可以实现复杂度为O(m+n) 为何简化了时间复 ...

  6. POJ 3461 Oulipo 【KMP统计子串数】

    传送门:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submission ...

  7. hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. HDU 1686 Oulipo【kmp求子串出现的次数】

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

  9. 统计子串数量,Python基础

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:陈YL PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

随机推荐

  1. C# Activator

    需要动态的创建一个实例模型的时候,就用Activator.CreateInstance(Type type);如果是明确的知道要创建哪个实例的模型,就可以用 new C#在类工厂中动态创建类的实例,所 ...

  2. CSS魔法堂:Transition就这么好玩

    前言  以前说起前端动画必须使用JS,而CSS3为我们带来transition和@keyframes,让我们可以以更简单(声明式代替命令式)和更高效的方式实现UI状态间的补间动画.本文为近期对Tran ...

  3. centos安装系统全过程

    --查看系统 lsb_release -a --查看端口 netstat -lnp|grep 80 ps 进程ID #查看进程的详细信息 kill -9 进程ID --查看Java 版本 java - ...

  4. 重新认识 Delphi

    一.彩蛋 1.打开 Delphi,选择"Help" –> "About-"菜单,出现 About 对话框. 2.在 About 窗口上按住 Alt 键盘, ...

  5. C++ 无锁数据结构

    https://www.zhihu.com/question/52629893/answer/131731126

  6. android学习十二(android的Content Provider(内容提供器)的使用)

    文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...

  7. 带你Python入门,踏进人工智能领域

    1.Python能做什么? 不知大家 没有看<中国好声音>呢?有位选择就是利用AI改编了一首周杰伦的歌<止战之殇>. Python适合做人工智能AI吗? 很明确的告诉你,可以! ...

  8. iOS性能优化篇 —— 耗电优化总结

         手机App耗电的主要来源有以下四个因素: CPU处理,Processing 网络,Networking 定位,Location 图像,Graphics 耗电优化最终目的:通过尽可能降低CPU ...

  9. mac上配置使用virtualenv

    1.安装virtualenv $ sudo pip install virtualenv 2.安装virtualenvwrapper $ sudo easy_install virtualenvwra ...

  10. 安全工具-Hydra

    Hydra v8.2 (c) 2016 by van Hauser/THC - Please do not use in military or secret service organization ...