博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11/5/2018模拟 Problem C
阅读量:6258 次
发布时间:2019-06-22

本文共 1333 字,大约阅读时间需要 4 分钟。

题面

1326473-20181105173024551-595912735.jpg

1326473-20181105173028395-743362444.jpg

题解

我有特殊的哈希技巧

以到下一个相同字符的距离为值哈希, 如果不存在或在串外, 就是 \(|T| + 1\).

加入一个新字符 \(S_i\) 时, 同时修改它上一次出现时的值, 由 \(|T| + 1\) 修改为 \(i\).

详见代码.

代码

#include
#include
#include
#include
#include
#include
#include
using namespace std;#define rep(i,l,r) for(register int i=(l);i<=(r);++i)#define repdo(i,l,r) for(register int i=(l);i>=(r);--i)#define il inlinetypedef double db;typedef long long ll;typedef unsigned long long ull;//---------------------------------------const int nsz=1e6+50,msz=1e5+50,base=1e5+3;int n,m;char s[nsz],t[msz];il int tr(char c){return c-'a'+1;}int nes[nsz],prs[nsz];int net[msz],prt[msz];ull hs=0,ht=0,pb[msz]{1};void gene(char *s,int *ne,int *pr,int n){ static int bot[30]; rep(i,1,26)bot[i]=n+1; repdo(i,n,1){ ne[i]=bot[tr(s[i-1])]; bot[tr(s[i-1])]=i; } rep(i,1,26)bot[i]=0; rep(i,1,n){ pr[i]=bot[tr(s[i-1])]; bot[tr(s[i-1])]=i; }}void sol(){ gene(s,nes,prs,n); gene(t,net,prt,m); rep(i,1,m){ ht=ht*base+(net[i]==m+1?m+1:net[i]-i); hs=hs*base+(nes[i]>m?m+1:nes[i]-i); pb[i]=pb[i-1]*base; } if(hs==ht)cout<<1<<'\n'; ull tmp; rep(i,m+1,n){//[i-m+1,i] tmp=(nes[i-m]>i-1?m+1:nes[i-m]-(i-m)); hs=hs*base-tmp*pb[m]; tmp=i-prs[i]; if(tmp
>s>>t; n=strlen(s),m=strlen(t); if(n

转载于:https://www.cnblogs.com/ubospica/p/9910410.html

你可能感兴趣的文章
python ----字符串基础练习题30道
查看>>
uva-10879-因数分解
查看>>
python 调用aiohttp
查看>>
Spring Boot中使用MyBatis注解配置详解
查看>>
linux下文件的一些文件颜色的含义
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
如何花更少的时间学习更多的知识
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
升级fedora 18到fedora 19
查看>>
【代码小记】无
查看>>
11月20日学习内容整理:jquery插件
查看>>
Redis客户端集群
查看>>
javascript基础篇:函数
查看>>
SVN与TortoiseSVN实战:补丁详解
查看>>
java一些面试题
查看>>
干货型up主
查看>>
获取页面中所有dropdownlist类型控件
查看>>
读《淘宝数据魔方技术架构解析》有感
查看>>
[转载]如何破解Excel VBA密码
查看>>
【BZOJ】2563: 阿狸和桃子的游戏
查看>>