無名(noname)
【问题描述】
因为是蒯的题所以没想好名字,为什么要用繁体呢?去看《唐诗三百首》吧!
题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为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)的更多相关文章
- [测试题]無名(noname)
Description 因为是蒯的题所以没想好名字,为什么要用繁体呢?去看<唐诗三百首>吧! 题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为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 ...
随机推荐
- networkx 学习
import networkx as nx import pylab import numpy as np #自定义网络 row=np.array([,,,,,,]) col=np.array([,, ...
- 局域网下访问其他计算机搭建的django网页
1.修改工程目录下的setting.py 文件 ALLOWED_HOSTS = ['*'] #*表示允许访问的ip 如果是添加* 则允许所有同局域网环境的主机访问 2.在完成的django工程下运行以 ...
- 关于使用栈将一般运算式翻译为后缀表达式并实现三级运算的方法及实例(cpp版)
#include <iostream> #include <stack> #include <vector> #include <string> #de ...
- Hibernate之Hibernate的下载与安装
Hibernate用法十分简单,当我们在Java项目中引入Hibernate框架之后,就能以面向对象的方式来操作关系数据库了. 下载: 登陆Hibernate官网,下载Hibernate压缩包,win ...
- 微信支付get_brand_wcpay_request:fail
最近做了微信支付功能,和后端一起踩坑中,微信一直报错:get_brand_wcpay_request:fail 出现该问题的原因: 1.生成的sign签名有问题 2.支付授权目录配置有问题 在经过仔细 ...
- IT学习逆袭的新模式,全栈实习生,不8000就业不还实习费
大家好: 我是马伦,也就是多年耕耘在IT培训一线的老马.老马一直怀揣普惠教育梦想初心,一直为莘莘学子能获得高质量的IT教育服务而奋斗. 之前老马在IT培训机构任职讲师多年,也有丰富的教学管理经验.接触 ...
- python全栈开发-常用模块的一些应用
一.random模块详解 1.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 2.常用方法 1. random ...
- oracle drop table(表)数据恢复方法
今天不小心把系统用户表给drop掉了,正在运行的系统正式库啊,还好可以恢复 一.查看数据库回收站,看删除的表是否还在回收站select object_name,original_name,partit ...
- python--同步锁/递归锁/协程
同步锁/递归锁/协程 1 同步锁 锁通常被用来实现对共享资源的同步访问,为每一个共享资源创建一个Lock对象,当你需需要访问该资源时,调用acquire()方法来获取锁对象(如果其他线程已经获得了该锁 ...
- TreeMap就这么简单【源码剖析】
前言 声明,本文用得是jdk1.8 前面章节回顾: Collection总览 List集合就这么简单[源码剖析] Map集合.散列表.红黑树介绍 HashMap就是这么简单[源码剖析] LinkedH ...