11/5/2018模拟 Problem C
题面


题解
我有特殊的哈希技巧
以到下一个相同字符的距离为值哈希, 如果不存在或在串外, 就是 \(|T| + 1\).
加入一个新字符 \(S_i\) 时, 同时修改它上一次出现时的值, 由 \(|T| + 1\) 修改为 \(i\).
详见代码.
代码
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
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 inline
typedef 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<m){
hs-=(m+1-tmp)*pb[tmp]; //dynamically modify
}
hs+=m+1;
if(hs==ht)cout<<i-m+1<<'\n';
}
}
int main(){
// freopen("c.in","r",stdin);
// freopen("c.out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0);
cin>>s>>t;
n=strlen(s),m=strlen(t);
if(n<m)return 0;
sol();
return 0;
}
11/5/2018模拟 Problem C的更多相关文章
- 11/1/2018模拟 Max
题面 也就是说, 随机序列RMQ.(\(n \le 8388608\), \(m \le 8*10^6\)) 解法 我写了笛卡尔树+tarjan 然而听神仙说, 因为数据随机, 建完树暴力找lca就行 ...
- 11.7 NOIP模拟赛
目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- 2018.11.08 NOIP模拟 班车(倍增+dfs+bit)
传送门 对于每个点离线处理出向上走2i2^i2i班车到的最上面的点. 然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果 ...
- 2018.11.08 NOIP模拟 水管(简单构造)
传送门 仔细读题会发现只要所有点点权之和等于0一定有解. 如何构造? 直接当做树来构造就行了,非树边都赋值成0就行. 代码
- 2018.11.08 NOIP模拟 景点(倍增+矩阵快速幂优化dp)
传送门 首先按照题意构造出转移矩阵. 然后可以矩阵快速幂求出答案. 但是直接做是O(n3qlogm)O(n^3qlogm)O(n3qlogm)的会TTT掉. 观察要求的东西发现我们只关系一行的答案. ...
- 2018.11.07 NOIP模拟 异或(数位dp)
传送门 对于每个二进制位单独考虑贡献. 然后对于两种情况分别统计. 对于第二种要用类似数位dpdpdp的方法来计算贡献. 代码
- 2018.11.07 NOIP模拟 分糖果(贪心)
传送门 考虑 n = 2 时的情况:假定两个人分别为(a, b),(c, d),则当且仅当min(a,d) ≤ min(b,c)时,把(a, b)放在前面更优,否则把(c, d)放在前面更优 然后把n ...
- 2018.11.07 NOIP模拟 数独(模拟)
传送门 sbsbsb签到题. 读题时间比写题时间长系列. 写一个checkcheckcheck函数来检验当前时间段第(i,j)(i,j)(i,j)号格子能否放入kkk就行了. 代码
随机推荐
- 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(数据库简单说明)
1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(视频总揽) 这里有个教程 http://www.cnblogs.com/best/p/6517755.h ...
- 《React Native 精解与实战》书籍连载「React Native 网络请求与列表绑定」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
- Flask入门的第一个项目进阶版
前言: 此次版本增加[一对多]数据库关系和动态路由设置. 一.数据库设计 environments表与variable1表的关系为:一对多.variable1.env_id设置为外键,与environ ...
- 最短路问题 Floyd+Dijkstra+SPFA
参考博客:https://blog.csdn.net/qq_35644234/article/details/60875818 题目来源:http://acm.hdu.edu.cn/showprobl ...
- 逻辑回归为什么用sigmoid函数
Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷. 因此,使用logistic函数(或称作sigmoid函数)将自 ...
- 书城项目第五阶段---book表的curd
JavaEE三层架构分析 MVC
- XT535
今天金山误删了一个文件,把手机系统整坏了,故刷了个机,刷机教程: http://bbs.dospy.com/thread-15027415-1-623-1.html 中间安装了个驱动精灵,否则手机开启 ...
- 我的集合学习笔记--ArrayList
一,ArrayList 实现自己的ArrayList:主要是添加方法,理解自动扩容机制 代码+注释 package com.amazing.jdk.learn2List.list_08_13; /** ...
- Jmeter监控服务器笔记
Jmeter监控服务器-CPU,Memory,Disk,Network性能指标 本文主要说一下如何通过JMeter插件来监控服务器CPU.内存.磁盘.网络等相关资源. 一.下载 首先进入网址https ...
- tomcat8.0部署启动
http://tomcat.apache.org/download-80.cgi 打开命令行提示符窗口, 进入Tomcat安装目录, 进入bin目录下, 输入:service.bat install ...