yltx's blog

yltx's blog

Κοιτάζοντας πάνω στον έναστρο ουρανό, κάτω στη γη.

题解 P5587 【打字练习】

posted on 2019-10-13 15:31:28 | under 题解 |

这个题唯一的坑点就在于范文也有退格键……

C++的string是个好东西,可以直接使用pop_back()函数直接弹掉当前的string的最后一个字符。

然后push_back()函数可以在string末尾加一个字符

于是就很简单了。。。读入之后,模拟退格,然后逐个比较即可。

代码:

#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const int N=1e4+5;
string s[N],t[N],s1;
long long n,m,cnt;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    while(getline(cin,s1),s1!="EOF"){
        n++;//读入字符串
        for(char i:s1)if(i=='<'){if(!s[n].empty())s[n].pop_back();}//模拟,如果是退格且string中还有字符就删掉一个
        else s[n].push_back(i);//否则加上去
    }
    while(getline(cin,s1),s1!="EOF"){
        if(++m>n)break;
        for(char i:s1)if(i=='<'){if(!t[m].empty())t[m].pop_back();}
        else t[m].push_back(i);//同上
        for(int i=0;i<min(t[m].size(),s[m].size());i++)cnt+=s[m][i]==t[m][i];//逐位比较
    }
    cin>>m;
    cout<<(long long)(cnt*60.0/m+0.5);//输出
}