如果在线处理退格的操作会显得复杂,所以直接离线,在读入的时候直接退好格,再扫一遍全文比对即可!
注意一些细节以及坑人的数据:输入也有退格(辣鸡打字练习应用,样例文本都能错 (╯▔皿▔)╯)
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=1e5+10;
const int N=1e6+10;
int cnt1,cnt2,ans,tot,num=1,num2=1,hang;
int nxt[M],nxt2[M];
char out[N],in[N];
int Read(){
int x=0;
char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x;
}
int main(){
in[++cnt1]=getchar();
while(in[cnt1]!='E'){
if(in[cnt1]=='\n') nxt[++num]=cnt1;
if(in[cnt1]=='<') cnt1=max(nxt[num],cnt1-2);
in[++cnt1]=getchar();
}
getchar(),getchar(),getchar();
out[++cnt2]=getchar();
while(out[cnt2]!='E'){
if(out[cnt2]=='\n') nxt2[++num2]=cnt2;
if(out[cnt2]=='<') cnt2=max(nxt2[num2],cnt2-2);
out[++cnt2]=getchar();
}
cnt1=cnt2=num=num2=1;
while(in[cnt1]!='E'&&out[cnt2]!='E'){
char ch1=in[cnt1],ch2=out[cnt2];
if(ch1=='\n'||ch2=='\n') num++,cnt1=nxt[num],cnt2=nxt2[num];
else if(ch1==ch2) if(ch1!='\n') ans++;
cnt1++,cnt2++;
}
tot=Read();
printf("%0.f\n",(double)ans/(tot/60.0));
return 0;
}
