题解 P5587 【打字练习】
引领天下
2019-10-13 15:31:28
这个题唯一的坑点就在于**范文也有退格键**……
C++的string是个好东西,可以直接使用pop_back()函数直接弹掉当前的string的最后一个字符。
然后push_back()函数可以在string末尾加一个字符
于是就很简单了。。。读入之后,模拟退格,然后逐个比较即可。
代码:
```cpp
#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);//输出
}
```