题目链接:https://www.luogu.org/problemnew/show/P3763

题目大意:

给定原串S0,询问S0有多少个子串和给定串S相差不到3个字母

题解:

我们枚举S0的子串,问题转化为如何高效的判断两个串是否相差不到三个字母

考虑到数据范围,发现只能有log的时间余地

自然想到二分

solve每次找到第一个不同的位置并且返回,连续solve 4次,若S在这期间被处理完了,那么说明两个串相差不到3个字母

当然还有一些小细节

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
typedef unsigned long long ull;
const int N=1e5+;
int lena,lenb;
ull pin[N],haa[N],hab[N];
char a[N],b[N];
void H()
{
haa[]=hab[]=;
for (int i=;i<=lena;i++)
{
haa[i]=haa[i-]*+a[i]-'a';
}
for (int i=;i<=lenb;i++)
{
hab[i]=hab[i-]*+b[i]-'a';
}
}
int solve(int x,int y)
{
int l=,r=lenb;
while (l<r)
{
int mid=l+r>>;
if ((haa[x+mid-]-haa[x-]*pin[mid])==(hab[y+mid-]-hab[y-]*pin[mid]))
{
l=mid+;
}
else r=mid;
}
if (haa[x+l-]-haa[x-]*pin[l]!=hab[y+l-]-hab[y-]*pin[l])
{
return l;
}
else return l+;
}
int check(int x)
{
int now=,k;
for (int i=;i<=;i++)
{
k=solve(x,now);
//printf("%d %d %d\n",x,now,k);
x+=k;now+=k;
if (now>lenb) return ;
}
k=solve(x,now);
x+=k-;now+=k-;
if (now>=lenb) return ;
return ;
}
int main()
{
pin[]=;
for (int i=;i<=N;i++) pin[i]=pin[i-]*;
int T;
scanf("%d",&T);
while (T--)
{
scanf("%s",a+);
scanf("%s",b+);
lena=strlen(a+),lenb=strlen(b+);
H();
//printf("%d\n",solve(2,3));
int re=;
for (int i=;i<=lena-lenb+;i++)
{
if (check(i)) re++;
}
printf("%d\n",re);
}
return ;
}

最新文章

  1. Get radio selected value
  2. 激活windows7 企业版小记
  3. 坦克大战,看你能坚持几秒 ~~Duang~~Duang
  4. Windows10的快捷键和新功能你利用了多少?
  5. MySQL基础二
  6. 常用jQuery代码01
  7. Android IOS WebRTC 音视频开发总结(五二)-- 亲,咱一起采访webrtc大会的各路专家
  8. C#:vs2010无法打开vs2012创建的项目
  9. 叼叼叼,HTML5日期(Date)类型和文本(Text)类型互相转换
  10. Unity中List的随机排序(乱序)
  11. Ext.net MessageBox提示
  12. qt sleep
  13. 本地服务器能ping通,但是ssh及各种端口都访问不到---待整理
  14. SharePoint研究之表单登录配置
  15. CentOS 启动-运行级别
  16. Bash游戏(51Nod - 1046)
  17. Python进行数值计算
  18. WIN10 当中装BDM驱动
  19. 编译参数-ObjC的说明
  20. javaScript定义函数的三种方式&amp;amp;变量的作用域

热门文章

  1. Win+X
  2. NEU2016年一月月赛回顾
  3. 杂项-报表:Formula One(Active电子表格控件)
  4. [jzoj 6092] [GDOI2019模拟2019.3.30] 附耳而至 解题报告 (平面图转对偶图+最小割)
  5. 几种AutoLayout自动布局所经常使用的布局约束类型
  6. sql导出到excel
  7. 关于PHP函数
  8. javascript动画函数封装
  9. SQL 学习——简序以及学习路线
  10. HDU 1203 I NEED A OFFER!【01背包】