题解 CF1492C【Maximum width】
概述
题号 | 难度 | \(AC\)时间及记录 |
---|---|---|
\(\texttt{CF1492C}\) | \(\texttt{洛谷难度:暂无评定}\) | \(\texttt{On 2021/02/24}\) |
解析
这是一道简单题。
题意也比较清晰。
不难想到,
众所周知,
我们可以对第二个字符串中的每一个字符从前往后扫,
再从后往前扫。
求出它们最大出现位置 \(Mx\) 数组,
以及他们最小出现位置 \(Mi\) 数组,
答案就很容易得到了。
代码
#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
using namespace std;
int N,M;
string S,T;
int Array[200001];
int Brray[200001];
int main(void)
{
BetterIO;
register int i,j;
cin>>N>>M;
cin>>S>>T;
register int X,Y;
X=Y=0;
while(Y<T.size())
{
if(S[X]==T[Y])
{
Array[Y]=X;
Y++;
}
X++;
}
X=N-1;
Y=M-1;
while(Y>=0)
{
if(S[X]==T[Y])
{
Brray[Y]=X;
Y--;
}
X--;
}
register int Mx;
Mx=0;
for(i=0;i<M;i++)
{
Mx=max(Mx,Brray[i+1]-Array[i]);
}
cout<<Mx<<endl;
return 0;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!