如果在线处理退格的操作会显得复杂,所以直接离线,在读入的时候直接退好格,再扫一遍全文比对即可!

注意一些细节以及坑人的数据:输入也有退格(辣鸡打字练习应用,样例文本都能错 (╯▔皿▔)╯)

#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;
}


0 0 votes
文章评分

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
Inline Feedbacks
View all comments