【问题描述】

因为是蒯的题所以没想好名字,为什么要用繁体呢?去看《唐诗三百首》吧!

题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为A,后缀为B。

需要注意的是,串中所有的字母都是小写字母。

友情提示:如果你过不了样例,请注意是不同的子串。                    

【输入文件】

一共3行。

第一行母串S;

第二行串A;

第三行串B。

【输出文件】

一个数,即有多少不同的子串。

【输入样例】

abababab

a

b

【输出样例】

4

【数据规模和约定】

100%:

length(S)<=2000;

length(A)<=2000;

length(B)<=2000;

30%:都少个0

字符串hash

首先,枚举每一个后缀是否前缀为A,front[i]表示i~l-1的前缀是否为A

同理处理出bside[i]表示0~i的后缀是否为B

枚举左右端点,可知当2个数组都为1才为一个解

但是解不能重复

于是用字符串hash,就是将字符串转数

hash[i]表示0~i的hash值

hash[i]=((hash[i-1]*p+idx(s[i]))%Mod

Mod和p都要慎重考虑,p取31,Mod取1e7+7

那么l~r的hash值为:hash(l~r)=(hash[r]-hash[l-1]*p^(r-l+1)+Mod)%Mod

一般Mod取1e9+7,但是这里要用bool数组,所以取1e7+7

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int p=,Mod=;
int l,la,lb,front[],bside[];
char s[],A[],B[];
long long pow[],hash[],ans;
bool vis[];
bool ask(int x,int y)
{
long long h=(hash[y]-(hash[x-]*pow[y-x+]%Mod)+Mod)%Mod;
if (vis[h]==)
{
vis[h]=;
return ;
}
else
{
return ;
}
}
int main()
{int i,j;
//freopen("noname.in","r",stdin);
//freopen("noname.out","w",stdout);
cin>>s;
cin>>A;
cin>>B;
l=strlen(s);
la=strlen(A);
lb=strlen(B);
for (i=;i<l;i++)
{
for (j=;j<=la,j+i-<l;j++)
if (A[j-]!=s[i+j-]) break;
if (j>la)
front[i]=;
}
for (i=l-;i>=;i--)
{
for (j=;j<=lb,i-j+>=;j++)
if (B[lb-j]!=s[i-j+]) break;
if (j>lb)
bside[i]=;
}
hash[]=(int)s[]-;
for (i=;i<=l;i++)
{
hash[i]=(hash[i-]*p+(int)s[i-]-)%Mod;
}
pow[]=;
for (i=;i<=l;i++)
pow[i]=(pow[i-]*p)%Mod;
for (i=;i<l;i++)
{
for (j=i+max(la,lb)-;j<l;j++)
if (front[i]&&bside[j])
if (ask(i+,j+)) ans++;
}
cout<<ans;
}

無名(noname)的更多相关文章

  1. [测试题]無名(noname)

    Description 因为是蒯的题所以没想好名字,为什么要用繁体呢?去看<唐诗三百首>吧! 题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为A,后缀为B. 需要注意的是,串中所 ...

  2. CentOS7安全设置 yum-cron系统自动更新,firewalld防火墙简单使用

    PermitRootLogin nosystemctl restart sshd.service; yum -y install firewalld; systemctl start firewall ...

  3. newlisp

    Windows で使う場合 Windoows用のインストーラからインストールすると.newLISP のIDE用のアイコンが出来るのでそこから使ってもいいし.コマンドプロンプトで newlisp と入力 ...

  4. RAMOS (内存操作系统)-无忧百科(不断完善中)

    RAMOS (内存操作系统)-无忧百科(不断完善中) - RAMOS - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?mod= ...

  5. C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 官方 ...

  6. Gson - 学习

    Google 的 Gson 库,Gson 是一个非常强大的库,可以将 JSON 格式的数据转化成 Java 对象,也支持将 Java 对象转成 JSON 数据格式. Gson 依赖 本文将会快速开始使 ...

  7. Kafka生产者APi

    kafka客户端发布record(消息)到kafka集群. 新的生产者是线程安全的,在线程之间共享单个生产者实例,通常单例比多个实例要快. 一个简单的例子,使用producer发送一个有序的key/v ...

  8. python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 nu ...

  9. java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...

随机推荐

  1. c语言的第三次---单程循环结构

    一.PTA实验作业 题目1 1.代码 int N,i; double height; //height代表身高 char sex; //代表男女性别 scanf("%d",& ...

  2. C语言第三周作业---单层循环

    一.PTA实验作业 题目1 1.实验代码 int N = 0,i; char sex; float a[9], height; scanf("%d\n", &N); for ...

  3. 《Language Implementation Patterns》之 符号表

    前面的章节我们学会了如何解析语言.构建AST,如何访问重写AST,有了这些基础,我们可以开始进行"语义分析"了. 在分析语义的一个基本方面是要追踪"符号",符号 ...

  4. AWS中的Internet 网关

    nternet 网关是一种横向扩展.支持冗余且高度可用的 VPC 组件,可实现 VPC 中的实例与 Internet 之间的通信.因此它不会对网络流量造成可用性风险或带宽限制. Internet 网关 ...

  5. MyBatis 中使用数据库查询别名进行映射

    方法1 XXMapper.xml <mapper namespace="com.hfepc.dao.andon.AndonExceptionKanbanVOMapper" & ...

  6. border 三角形 有边框的 东西南北的 气泡三角形

    链接地址:http://www.cnblogs.com/blosaa/p/3823695.html

  7. 调用WCF时,调用已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定。

    解决方案: 其实只要在客户端配置文件中加上如下紫色粗体属性( maxReceivedMessageSize): <?xml version="1.0" encoding=&q ...

  8. Python扩展模块——调用WindowsAPI(pywin32的简单使用)

    这块使用的比较少,只用到了模拟键盘按键, 调用鼠标比较费事,是通过像素坐标实现的,如果没有特殊需求或万不得已不建议使用 import win32con import win32api win32api ...

  9. 第一次制作和使用图标字体-IcoMoon

    开题:之前就有所耳闻,最近两天第一次运用到图标字体.刚开始嘛,一脸懵逼的状态.成功运用之后就来记录一下使用过程咯! 1. 打开在线生成工具:https://icomoon.io/app/#/selec ...

  10. web api 如何通过接收文件流的方式,接收客户端及前端上传的文件

    服务端接收文件流代码: public async Task<HttpResponseMessage> ReceiveFileByStream() { var stream = HttpCo ...