计蒜客 阿里天池的新任务—简单( 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. 计蒜客(获取复 ...
随机推荐
- asp.net--OnAuthorization方法
我看别人可以通过这个方法中的 Context.Request.Headers.Authorization对象来调取对象来使用,可是我通过实验尝试不出来,真不知道为什么,这儿留个坑吧 别人的 我的
- Python之Mysql及SQLAlchemy操作总结
一.Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to 'feng'@'%' identifi ...
- hdu5389 Zero Escape DP+滚动数组 多校联合第八场
Zero Escape Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) To ...
- 学习日记之原型模式和Effective C++
原型模式(Prototype):用原型实例制定创建对象的种类,而且听过拷贝这些原型创建新的对象. 浅复制:假设字段是值类型的,则对该字段运行逐位复制.假设字段是引用类型.则复制引用但不复制引用的对象. ...
- Android学习笔记(8):ViewGroup类
A ViewGroup is a special view that can contain other views (called children.) The view group is the ...
- php学习随记3
<? php #正則表達式 #就是一种描写叙述字符串结构的语法规则 #是一个特定的格式化模式 #1. 行定位符 /* 1) ^行首 2)$行尾 tm eqaul Tomorrow Moon ^t ...
- MyBatis中sqlSession操作数据库,不报错但无法实现数据修改(增、改、删)
public void addCustomerTest() throws Exception { SqlSession sqlSession = MyBatisUtils.getSession(); ...
- get post 的区别
比较 GET 与 POST 还有一个问题就是:form 表单的get post 的默认传输量是多少? 期待评论区来解答!!! 一个获取数据,一个修改数据. 下面的表格比较了两种 HTTP 方法:GET ...
- django 实现websocket
一.简述:django实现websocket,之前django-websocket退出到3.0之后,被废弃.官方推荐大家使用channels. channels通过升级http协议 升级到websoc ...
- 最小环 hdu1599 poj1734
最小环用floyd改编. hdu1599特殊一些.要求至少有三个不同的点,并且除了起点与终点重合外,中间不能有环.有点很奇怪,最大值不能为0x3f3f3f3f. poj1374就没那么讲究. //hd ...