[测试题]無名(noname)
Description
因为是蒯的题所以没想好名字,为什么要用繁体呢?去看《唐诗三百首》吧!
题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为A,后缀为B。
需要注意的是,串中所有的字母都是小写字母。
Input
一共3行。
第一行母串S;
第二行串A;
第三行串B。
Output
一个数,即有多少不同的子串。
Sample Input
abababab
a
b
Sample Output
4
Hint
100%:
length(S)<=2000;
length(A)<=2000;
length(B)<=2000;
30%:都少个0。
题解
我们可以预处理出所有$A$串和$B$串在$S$中的位置。
找到合法的串,我们可以去找前缀和后缀的位置,取出中间的部分用$hash$判重就好了。
#include<set>
#include<map>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const LL N=;
const LL MOD=1e8+; LL Max(const LL &a,const LL &b) {return a>b ? a:b;}
LL Min(const LL &a,const LL &b) {return a<b ? a:b;} char S[N+],A[N+],B[N+];
LL ls,la,lb;
bool vis[N+];
LL ans;
LL q[N+],hash[N+];
bool pd[MOD+]; bool find_hash(LL x)
{
if (pd[x]) return false;
pd[x]=;
return true;
} int main()
{
S[]=A[]=B[]='$';
scanf("%s%s%s",S+,A+,B+);
ls=strlen(S)-,la=strlen(A)-,lb=strlen(B)-;
q[]=;
for (LL i=;i<=ls;i++) q[i]=(q[i-]*)%MOD;
for (LL i=;i<=ls;i++) hash[i]=(hash[i-]*+S[i]-'a'+)%MOD;
for (LL i=;i<=ls;i++) if (S[i]==B[])
{
LL j;
for (j=;j<=lb;j++) if (S[i+j-]!=B[j]) break;
if (j>lb) vis[i]=;
}
for (LL i=;i<=ls;i++) if (S[i]==A[])
{
LL j;
for (j=;j<=la;j++) if (S[i+j-]!=A[j]) break;
if (j>la)
{
for (LL j=Max(i,la-lb+i);j<=ls;j++) if (vis[j])
{
LL r=j+lb-;
if (find_hash((hash[r]+MOD-hash[i-]*q[r-i+]%MOD)%MOD)) ans++;
}
}
}
printf("%lld\n",ans);
return ;
}
[测试题]無名(noname)的更多相关文章
- 無名(noname)
[问题描述] 因为是蒯的题所以没想好名字,为什么要用繁体呢?去看<唐诗三百首>吧! 题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为A,后缀为B. 需要注意的是,串中所有的字母都 ...
- CentOS7安全设置 yum-cron系统自动更新,firewalld防火墙简单使用
PermitRootLogin nosystemctl restart sshd.service; yum -y install firewalld; systemctl start firewall ...
- newlisp
Windows で使う場合 Windoows用のインストーラからインストールすると.newLISP のIDE用のアイコンが出来るのでそこから使ってもいいし.コマンドプロンプトで newlisp と入力 ...
- RAMOS (内存操作系统)-无忧百科(不断完善中)
RAMOS (内存操作系统)-无忧百科(不断完善中) - RAMOS - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?mod= ...
- C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 官方 ...
- Gson - 学习
Google 的 Gson 库,Gson 是一个非常强大的库,可以将 JSON 格式的数据转化成 Java 对象,也支持将 Java 对象转成 JSON 数据格式. Gson 依赖 本文将会快速开始使 ...
- Kafka生产者APi
kafka客户端发布record(消息)到kafka集群. 新的生产者是线程安全的,在线程之间共享单个生产者实例,通常单例比多个实例要快. 一个简单的例子,使用producer发送一个有序的key/v ...
- python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 nu ...
- java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC
本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...
随机推荐
- Rails Migration Data Model栏位修改及数据类型介绍
测试版本Ruby:2.3.1 Rails:5.0.1 一.增加栏位 给devise默认的用户新增增加username字段 $ rails generate migration add_ ...
- 201621123062《java程序设计》第九周作业总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 思维导图1:(对集合部分做了一些改动和细化) 思维导图2:(泛型) 1.2 选做:收集你认为有用的代码片段 代 ...
- 判断mine类型
var http = require("http"); var fs = require("fs"); var url = require("url& ...
- 算法第四版学习笔记之优先队列--Priority Queues
软件:DrJava 参考书:算法(第四版) 章节:2.4优先队列(以下截图是算法配套视频所讲内容截图) 1:API 与初级实现 2:堆得定义 3:堆排序 4:事件驱动的仿真 优先队列最重要的操作就是删 ...
- HTTP协议中PUT和POST使用区别
有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和POST中任何一个来做创 ...
- java利用iTextWorker生成pdf
使用itext生成pdf,在linux环境下,中文全部失踪,因为itext要在linux下支持中文字体需要引入itext-asian, 并添加一个字体类. public static class Pd ...
- vue style width a href动态拼接问题 ?
style width 这个问题 折磨了我一个上午了 好惭愧 因为项目涉及到 进度条 所以必须用行内样式 style 用过vue的都知道 vue中style的用法 大众用法 :style=&quo ...
- 根据抽象工厂实现的DBHelpers类
public abstract class DBHelper { public static SqlConnection conn = new SqlConnection("server=l ...
- ZendStudio的使用技巧
为了使得ZendStudio支持volt模版可以在首选项中的ContentType加上.volt就行 在ZendStudio中的->help中有一个installNewssoftWare,然后会 ...
- MySQL 避免重复数据的批量插入与批量更新
[转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...