【集训Day2】字符串
字符串(string)
【问题描述】
给一个字符串T,问在字符串T 中可以包含最多多少个不重叠的字符串S。
字符串中的每个字符为小写或者大写字母。
【输入格式】
第一行输入一个字符串S。
第二行输入一个字符串T。
【输出格式】
输出一行,包括一个整数表示答案。
【输入样例】
Aba
Abababa
【输出样例】
2
【数据范围】
50%的数据,1<=字符串T 长度<=20000, 1<=字符串S 长度<=100
100%的数据,1<=字符串T 长度<=1000000, 1<=字符串S 长度<=100000。其中多数是随
机产生。
【解题思路】
将字符串转化为独一无二的五十二进制数,利用部分和原理一段一段进行比较。
【参考程序】
#include<iostream>
#include<cstdio>
using namespace std;
const int mod=13131313;//取模是因为五十二进制数通常非常大。
string s,t;
int lens,lent;
long long num,l[1000001],tmp,ans;
int trans(char a)//将字母变成五十二进制中的0...51
{
if (a>='a') return a-'a';
else return a-'A'+26;
}
int main()
{
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
cin>>s;lens=s.size();
for (int i=0;i<lens;i++)
num=(num*52%mod+trans(s[i]))%mod;//转化出s的五十二进制代码
cin>>t;lent=t.size();
l[1]=(l[0]*52%mod+trans(t[0]))%mod;//转化出1~t[i]的五十二进制代码
for (int i=1;i<lent;i++)
l[i+1]=(l[i]*52%mod+trans(t[i]))%mod;
tmp=1;
for (int i=0;i<lens;i++)//利用部分和原理
tmp=tmp*52%mod;
//像是如果要取999666中的666,需要999666- 999*10^2。
//这里求的就是其中的对应10^2,只不过这里是52^lens
int left=1;
while (left<=lent-lens+1)
{
long long find=(l[left+lens-1]-l[left-1]*tmp%mod+mod)%mod;
if (find==num)
{
ans++;
left+=lens;//不重叠
}
else left++;
}
cout<<ans;
return 0;
}
【集训Day2】字符串的更多相关文章
- python_way ,day2 字符串,列表,字典,时间模块
python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...
- WC集训DAY2笔记 组合计数 part.1
目录 WC集训DAY2笔记 组合计数 part.1 基础知识 组合恒等式 错排数 卡特兰数 斯特林数 伯努利数 贝尔数 调和级数 后记 补完了几天前写的东西 WC集训DAY2笔记 组合计数 part. ...
- 2019暑期金华集训 Day3 字符串
自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对 ...
- 2019暑期金华集训 Day2 线性代数
自闭集训 Day2 线性代数 高斯消元 做实数时,需要找绝对值最大的作为主元,以获取更高精度. 在欧几里得环(简单例子是模合数)意义下也是对的.比如模合数意义下可以使用辗转相除法消元. 欧几里得环:对 ...
- 暑假集训Day2 互不侵犯(状压dp)
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...
- 2022寒假集训day2
day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...
- Python之路 day2 字符串/元组/列表/字典互转
#-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ' ...
- python day2 字符串的方法
1.首字母大写 name = "wuyuchao"result = name.capitalize()print(result)返回 Wuyuchao--------------- ...
- [日常训练]常州集训day2
T1 Description 给定$N$个点,问这$N$个点能构成的三角形个数. Input 第一行一个整数$N$,代表点数. 接下来$N$行,每行两个非负整数$X,Y$,表示一个点的坐标. Outp ...
随机推荐
- 该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。 配置文件: ***.vmx。
打开虚拟机的时候,出现这样的问题: 该虚拟机似乎正在使用中. 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权.否则,请按“取消(C)”按钮以防损坏. 配置文件: D:\VM\wi ...
- 使用maven替换项目依赖中的字节码
问题描述 我们偶尔会发现一些开源项目的问题,或者出于其他原因,想在某个dependency的代码中加几行或者删除几行来达到目的. 我这里遇到一个dubbo 2.7.3和open feign冲突的问题 ...
- SpringBoot配置文件之Yml语法
一 使用 YAML 而不是 Properties YAML是 JSON 的超集,因此,它是用于指定分层配置数据的便捷格式.只要 class 路径上有SnakeYAML library,SpringAp ...
- (八十六)c#Winform自定义控件-表格优化
出处:http://www.hzhcontrols.com/原文:http://www.hzhcontrols.com/blog-149.html本文版权归www.hzhcontrols.com所有欢 ...
- 第二十六章 system v消息队列(二)
msgsnd int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 作用: 把一条消息添加到消息队列中 参数: msqi ...
- vi文本编辑器命令
基本上 vi 共分为三种模式,分别是『一般模式』.『编辑模式』与『指令列命令模式』. 这三种模式的作用分别是: 一般模式:以 vi 打开一个档案就直接进入一般模式了(这是默认的模式).在这个模式中, ...
- 学习笔记36_Razor
*Razor视图引擎 在添加视图的时候,视图引擎除了有“aspx”外,还有Razor(CSHTML),就会在对应的文件夹下,产生 view.cshtml文件,那么,以后写C#代码,就可以 @for(v ...
- 非旋treap (fhq treap) 指针版
传送门 看了一圈,好像真的没什么用指针的呢.. 明明觉得指针很好看(什么??你说RE???听不见听不见) 其实我觉得用数组的话不RE直接WA调起来不是更困难嘛,毕竟通过gdb还可以知道哪里RE,WA就 ...
- NOIP模拟34
考试的时候被T2卡了一年....考虑了一下正解的式子,然后没去给左边分解因数,去给后面乘倍数...理论复杂度O(n^2),实际好像卡不掉的样子.但是由于我智障的打了一棵主席树,他M了.... 预计得分 ...
- 路由传参 query 和 params
vue路由传参分为两种情况: 一.query和params传参的区别: 1.query传参显示参数,params传参不显示参数,params相对于query来说较安全一点. 2.取值方法也有不同:qu ...