無名(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 ...
随机推荐
- 2017年秋软工-领跑衫获奖感言&我最感谢的人
啥都不说,先上幅图.获得领跑衫,开心. 一.回忆 这是我第二次来上恩师杨的软件工程,第一次是2016年春,那时候我还是本科三年级的学生.忘了第一次为啥去蹭课,印象中是我的榜样亮哥把我给忽悠过去的?我也 ...
- 第十四周实验报告:实验四 Android程序设计
20162317袁逸灏 第十四周实验报告:实验四 Android程序设计 实验内容 Android Studio 实验要求 学会使用Android Studio 学习 活动 以及相关知识内容 学习 U ...
- C语言--期末总结
一. 1.当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 答:当初报志愿的时候,没有具体的想法,只凭借着 ...
- codevs 3342 绿色通道
codevs 3342 绿色通道 http://codevs.cn/problem/3342/ 难度等级:黄金 题目描述 Description <思远高考绿色通道>(Green Pass ...
- 进军ABP第一天:ABP理论知识
1.2.3 领域层领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现. ( 实体(Entity ) 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表. ( 仓储(Repo ...
- 我的前端故事----来聊聊react-native应用的健康监控
监控什么 今天我们来聊聊如何监控你的应用程序,这里的监控说的不是让我们去监控用户,而是监控应用的健康状态,什么是健康状态呢?对于后端的同学来说,在微服务的架构下,每个子服务是否正常工作.返回的结果是否 ...
- kubernetes入门(01)kubernetes是什么?
一.kubernetes是什么? Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以 ...
- hadoop2.6.0实践:A03 例子验证
[hadoop@LexiaofeiN1 ~]$ hdfs dfs -ls /output/grep[hadoop@LexiaofeiN1 ~]$ hdfs dfs -rm -R /output/gre ...
- C#配置文件config的使用
做程序的时候总会有一些参数,可能会调整,这时候一般情况下我都会写在配置文件里,这样方便一点. 配置文件的读取 <?xml version="1.0" encoding=&qu ...
- Python之匿名函数
匿名函数 匿名函数:为了解决那些功能很简单的需求而设计的一句话函数. #这段代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lam ...