计蒜客 阿里天池的新任务—简单( KMP水 )
**链接:****传送门 **
思路:KMP模板题,直接生成 S 串,然后匹配一下 P 串在 S 串出现的次数,注意处理嵌套的情况即可,嵌套的情况即 S = "aaaaaa" ,P = "aa" P 串在S 串中出现了 5 次。
/*************************************************************************
> File Name: jsk02e2.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年05月21日 星期日 10时28分09秒
************************************************************************/
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1000100;
char S[MAX_N] , P[MAX_N];
int W[MAX_N];
void init(int n,int a,int b,int L,int R){
W[0] = b;
for(int i = 1 ; i < n ; i++) W[i] = ( W[i-1] + a ) % n;
for(int i = 0 ; i < n ; i++){
if( W[i] >= L && W[i] <= R){
if( W[i] & 1 ) S[i] = 'T';
else S[i] = 'A';
}
else{
if( W[i] & 1 ) S[i] = 'C';
else S[i] = 'G';
}
}
}
// KMP部分
void Build_Next(const char* pat,int next[]){
int i = 1 , t = 0 , plen = strlen(pat);
next[1] = 0;
while( i < plen + 1 ){
while( t > 0 && pat[i-1]!=pat[t-1] ) t = next[t];
++t , ++i;
if( pat[i-1] == pat[t-1] ) next[i] = next[t];
else next[i] = t;
}
while( t > 0 && pat[i-1] != pat[t-1] ) t = next[t];
++i , ++t;
next[i] = t;
}
int KMP(const char* text , const char* pat){
int i , j , n;
int tlen = strlen(text) , plen = strlen(pat);
int next[plen+2];
Build_Next(pat,next);
i = 0 , j = 1 , n = 0;
while( plen + 1 - j <= tlen - i ){
if( text[i] == pat[j-1] ){
++i , ++j;
if( j == plen + 1 ){
// matches[n++] = i - plen; // 发现匹配结果将匹配子串的位置加入结果集合
n++; j = next[j];
}
}
else{
j = next[j];
if( j == 0 ){
i++ , j++;
}
}
}
return n;
}
int main(){
int n , a , b , L , R;
scanf("%d%d%d%d%d",&n,&a,&b,&L,&R);
scanf("%s",P);
init(n,a,b,L,R);
int ans = KMP(S,P);
printf("%d\n",ans);
return 0;
}
计蒜客 阿里天池的新任务—简单( KMP水 )的更多相关文章
- 计蒜客 30990 - An Olympian Math Problem - [简单数学题][2018ICPC南京网络预赛A题]
题目链接:https://nanti.jisuanke.com/t/30990 Alice, a student of grade 6, is thinking about an Olympian M ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
- 计蒜客:Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
- 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)
https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...
随机推荐
- 草草搞了个SERVLET的注册登陆功能
按书来的,学习阶段,一切都好新奇..至少对比于DJANGO,好像复杂点点,但HTTP的东东,是相通的哈. package cc.openhome.controller; import java.io. ...
- 关于Hanoi算法
java经典算法——河内算法(Hanoi) 有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出 ...
- Android-黑科技-微信抢红包必备软件
黑科技微信抢红包 介绍: 本节类容和技术无太大关系.主要是个人认为比較好玩,年关将至,对于新起之秀微信红包.绝对是过春节首选.看到就是赚到,速速围观下载.眼下仅 ...
- Activiti的简单入门样例(经典的请假样例)
经典的请假样例: 流程例如以下,首先须要部门经理审批.假设请假天数大于2天,则须要总经理审批,否则HR审批就可以 一:创建maven项目,项目结构例如以下: watermark/2/text/aHR0 ...
- 各种JSON的maven引用
一.jackjson maven <jackjson.version>2.8.8</jackjson.version> <dependency> <group ...
- 0x59 单调队列优化DP
倍增DP太难啦心情好再回去做 poj1821 先让工匠按s排序,f[i][j]表示枚举到第i个工匠涂了j个木板(注意第j个木板不一定要涂) 那么f[i][j]可以直接继承f[i-1][j]和f[i][ ...
- C#编译器优化
C#编译器优化 https://www.cnblogs.com/podolski/p/8987595.html 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置 ...
- [ZJOI 2010] 数字计数
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1833 [算法] 数位DP [代码] #include <algorithm&g ...
- html/css常用合集
1. 消除inline-block元素间的换行间隙问题: {font-size:0;} 兼容IE6/7浏览器的方法:letter-spacing属性. 2.让两个inline-block的div顶 ...
- HTML5 audio 如何实现播放多个MP3音频
<audio>标签是HTML5中的新标签,定义声音用于嵌入音频内容,比如音乐或其他音频流.用的比较多音频格式是.mp3. <audio>标签常用属性如下表 属性 值 描述 au ...