[测试题]無名(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 ...
随机推荐
- JavaScript(简介)【Javascript历史】
学习一门知识应该了解其背景,很多人认为会用就行,起初我也是这么认为的,但后来才知道对起源的了解也很必要,从事javascript开发5年,今天开始总结一些笔记,分享下. 一.什么是JavaScript ...
- 结对作业NO.2
结对NO.2 1. 引言 1.1 项目地址 github 生成的一组好数据 1.2 项目简介 按照老师给的项目要求:"编码实现一个部门与学生的智能匹配的程序".由于数据需要自己生成 ...
- 团队作业2:需求分析&原型设计
Deadline: 2017-11-5 22:00PM,以博客发表日期为准. 评分基准: 按时交 - 有分,检查的项目包括后文的三个方面 需求分析 原型设计 编码规范 晚交 - 0分 迟交两周以 ...
- C语言--第六周作业
一.高速公路超速罚款 1.代码 #include<stdio.h> int main() { int a,b; float c; scanf("%d %d",& ...
- 单向链表在O(1)时间内删除一个节点
说删链表节点,第一时间想到就是遍历整个链表,找到删除节点的前驱,改变节点指向,删除节点,但是,这样删除单链表的某一节点,时间复杂度就是O(n),不符合要求: 时间复杂度是O(n)的做法就不说了,看看O ...
- intellij idea 找不到或无法加载主类
解决intellij idea 找不到或无法加载主类,请看以下图文介绍 然后idea会重启,等idea启动后 右侧的maven clean 一下,然后再compile就解决了
- js常用API方法
String对象常用的API:API指应用程序编程接口,实际上就是一些提前预设好的方法. charAt() 方法可返回指定位置的字符. stringObject.charAt(index) index ...
- PHP冒泡排序、选择排序、插入排序
$arr = [1, 8, 7, 5, 4, 2, 11, 9, 20]; 冒泡排序: for ($i = 0; $i < count($arr); $i ++) { for ($j = 0; ...
- Python内置函数(51)——hasattr
英文文档: hasattr(object, name) The arguments are an object and a string. The result is True if the stri ...
- Spring Security 入门(1-1)Spring Security是什么?
1.Spring Security是什么? Spring Security 是一个安全框架,前身是 Acegi Security , 能够为 Spring企业应用系统提供声明式的安全访问控制. Spr ...