【问题描述】

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

题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为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: 7-6 掉入陷阱的数字 1. 本题PTA提交列表 2.设计思路 定义变量N,i,g=1表示位数,a表示各位数字相加的和,b=0,j,N1,c,d用于储存N do{ for ...

  2. Python 双向链表

    操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, it ...

  3. 常用的汇编指令 movs stos

    movsb   把寄存机esi所存的地址的数据以字节复制到edi movsw  把寄存机esi所存的地址的数据以word复制到edi movsd   把寄存机esi所存的地址的数据以dword复制到e ...

  4. 使用location.href跳转页面在火狐浏览器中报错404

    HTML文件中引入外部js文件,在该js文件里用window.location.href跳转相对路径下的html地址,火狐浏览器会报错404,而谷歌浏览器却显示正常·,分析了一下原因:在识别相对路径时 ...

  5. vueJs 源码解析 (三) 具体代码

    vueJs 源码解析 (三) 具体代码 在之前的文章中提到了 vuejs 源码中的 架构部分,以及 谈论到了 vue 源码三要素 vm.compiler.watcher 这三要素,那么今天我们就从这三 ...

  6. 获取选中的radio的value值

    html:<div id="bb"> <input  name="cc" type="radio" value=" ...

  7. 微信小程序组件学习中

    一.轮播图 wxml代码: <swiper indicator-dots="true" autoplay="true" duration="10 ...

  8. SpringCloud是什么?

    参考链接: http://blog.csdn.net/forezp/article/details/70148833 一.概念定义       Spring Cloud是一个微服务框架,相比Dubbo ...

  9. kafka HA

    1. replication 如图.1所示,同一个 partition 可能会有多个 replica(对应 server.properties 配置中的 default.replication.fac ...

  10. 2018年html5入门到精通教程电子书百度云盘下载共22本

    名称 查看 <HTML5启动和运行>(HTML5.Up.and.Running)扫描版[PDF] 下载 <Pro HTML5 Performance>(Pro HTML5 Pe ...