题解 P5587 【打字练习】

引领天下

2019-10-13 15:31:28

Solution

这个题唯一的坑点就在于**范文也有退格键**…… 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);//输出 } ```