Codeforces Round #579 (Div. 3)D(字符串,思维)
#include<bits/stdc++.h>
using namespace std;
char s[200007],t[200007];
int last[200007][27],nxt[200007][27];
int l[200007],r[200007];
int main(){
cin>>s+1>>t+1;
int n=strlen(s+1);
int m=strlen(t+1);
for(int i=1;i<=n;++i){
for(int j=0;j<26;++j)
last[i][j]=last[i-1][j];//i表示当前位置,j表示字母大小,复制当前位置以前最晚出现字母j的位置就是前一格位置以前最晚出现j字母的位置
last[i][s[i]-'a']=i;//更新当前位置以前最晚出现字母s[i]的位置
}
for(int i=n;i;--i){
for(int j=0;j<26;++j)
nxt[i][j]=nxt[i+1][j];//复制当前位置以后最早出现字母j的位置就是前一格位置以前最早出现字母j的位置
nxt[i][s[i]-'a']=i;//更新当前位置以后最早出现字母s[i]的位置
}
int now=1;
l[0]=1;
for(int i=1;i<=m;++i){
now=nxt[now][t[i]-'a']+1;//now表示now位置以后最早出现字母t[i]的位置,保证该位置以后还能有剩余的t字符串i+1~m
l[i]=now;//更新i位置左端点的值为now
}
now=n;
r[m+1]=n;
for(int i=m;i;--i){
now=last[now][t[i]-'a']-1;//now表示now位置以前最晚出现字母t[i]的位置,保证该位置以前还能有剩余的t字符串1~i-1
r[i]=now;//更新i位置右端点的值为now
}
int ans=0;
for(int i=0;i<=m;++i)
ans=max(r[i+1]-l[i]+1,ans);//更新答案为字母t[i+1]最晚出现的位置减去字母t[i]最早出现的位置+1
cout<<ans;
return 0;
}
Codeforces Round #579 (Div. 3)D(字符串,思维)的更多相关文章
- Codeforces Round #541 (Div. 2) E 字符串 + 思维 + 猜性质
https://codeforces.com/contest/1131/problem/D 题意 给你n个字符串,字符串长度总和加起来不会超过1e5,定义字符串相乘为\(s*s1=s1+s[0]+s1 ...
- Codeforces Round #579 (Div. 3)
Codeforces Round #579 (Div. 3) 传送门 A. Circle of Students 这题我是直接把正序.逆序的两种放在数组里面直接判断. Code #include &l ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- Codeforces Round #410 (Div. 2)(A,字符串,水坑,B,暴力枚举,C,思维题,D,区间贪心)
A. Mike and palindrome time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...
- Codeforces Round #336 (Div. 2)【A.思维,暴力,B.字符串,暴搜,前缀和,C.暴力,D,区间dp,E,字符串,数学】
A. Saitama Destroys Hotel time limit per test:1 second memory limit per test:256 megabytes input:sta ...
- Codeforces Round #579 (Div. 3) D2. Remove the Substring (hard version) (思维,贪心)
题意:给你一个模式串\(t\),现在要在主串\(s\)中删除多个子串,使得得到的\(s\)的子序列依然包含\(t\),问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择\(s\)头部到最 ...
- 【cf比赛练习记录】Codeforces Round #579 (Div. 3)
思考之后再看题解,是与别人灵魂之间的沟通与碰撞 A. Circle of Students 题意 给出n个数,问它们向左或者向右是否都能成一个环.比如样例5是从1开始向左绕了一圈 [3, 2, 1, ...
- Codeforces Round #541 (Div. 2) G dp + 思维 + 单调栈 or 链表 (连锁反应)
https://codeforces.com/contest/1131/problem/G 题意 给你一排m个的骨牌(m<=1e7),每块之间相距1,每块高h[i],推倒代价c[i],假如\(a ...
- Codeforces Round #329 (Div. 2)A 字符串处理
A. 2Char time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
随机推荐
- 分段函数&数学函数
本题要求计算下列分段函数f(x)的值(x为从键盘输入的一个任意实数): 输入格式: 直接输入一个实数x 输出格式: 在一行中按“f(x)=result”的格式输出,其中x与result都保留三位小数. ...
- git查漏补缺
1. commit提交注释规范 2. commit 注释没写完或写错了,在不用删除这条commit的情况下,如何更正注释信息 git commit -m '1' git commit --amend ...
- 「CSP-S模拟赛」2019第二场
目录 T1 Jam的计数法 题目 考场思路(正解) T2 「TJOI / HEOI2016」排序 题目 考场思路(假正解) 正解 T3 「THUWC 2017」随机二分图 题目 考场思路 正解 这场考 ...
- Java进阶学习(3)之对象容器(下)
对象数组 对象数组中的每个元素都是对象的管理者而非对象本身 对象数组的for—each循环 集合容器(HashSet) HashSet 数学中的集合,元素间满足互异性.确定性.无序性 HashSet& ...
- html学习-第二集(CSS)
head标签里面添加style标签,可以为标签添加样式 id选择器 类选择器 标签选择器 层级选择器 组合选择器 属性选择器 <!DOCTYPE html> <html lang=& ...
- JavaScript 对象属性与方法
对象的创建: 1 字面量创建 var obj = {a:1,b:2}; 2 构造函数创建 var obj = new Object(); obj.a = 1; obj.b = 2; 3 Object. ...
- BugReport-智慧农业APP
1.展示的界面显示不全 bug Description: 测试环境:win10.工具eclipse: 测试步骤:打开运行程序后模拟器启动,第一个界面显示过几秒跳到了另一个界面,问题是第一个界面显示不全 ...
- Tarjan's algorithm
Tarjan算法可以用来求有向图的强连通分量个数,之前十分粗略的写了Kosaraju算法,这里打算比较认真的分析一下Tarjan算法,然后给出算法实现代码. Tarjan算法的主要算法部分也是dfs( ...
- Python - 私有属性(双下线的变形)
__x会自动变形为_类名__x 正常情况 class A: def foo(self): print('from A') def test(self): self.foo() class B(A): ...
- Web--Response
using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using ...