【洛谷P5587】打字练习
【P5587】打字练习
【废话】首先,作为我练习字符串的一道题,很自然的意料之中的遇到了瓶颈
【前置知识】
- 字符的输入
- 久远的记忆让我以为 gets 还能用,于是就RE了,后来又用
scanf("%[^\n]",s);
,但是由于没有熟练掌握,换为getchar
- 久远的记忆让我以为 gets 还能用,于是就RE了,后来又用
-
-
getchar
一次只能进行一个字符的读入,因此可以每次判断读入内容后放进字符组里
-
【解题思路】
- 针对于每一组字符都存在一个
stack
里 - 比较时候,要先将
stack
中的字符先装进另一个临时栈中 - 注意
<
的处理
【遇到的坑】
- 若只出题人把范文也加了退回
【我的若只CODE】
实现代码
#include<bits/stdc++.h>
using namespace std;
char s;
stack<char> s1[4001];
long long ans;
int cnt;
signed main()
{
cnt=1;
while(1)
{
s=getchar();
if(s=='F')
{
break;
}
else if(s=='\n')
{
cnt++;
}
else if(s=='<' and !s1[cnt].empty())
{
s1[cnt].pop();
}
else if((s>='a' and s<='z') or s=='.' or s==' ')
{
s1[cnt].push(s);
}
}
int id=0;
while(1)
{
stack<char> t1,t2,s2;
while(1)
{
s=getchar();
if(s=='F')
{
break;
}
else if(s=='\n')
{
break;
}
else if(s=='<' and !s2.empty())
{
s2.pop();
}
else if((s>='a' and s<='z') or s=='.' or s==' ')
{
s2.push(s);
}
}
if(s=='F')
{
break;
}
else
{
while(!s1[id].empty())
{
t1.push(s1[id].top());
s1[id].pop();
// cout<<t1.top()<<endl;
}
id++;
while(!s2.empty())
{
t2.push(s2.top());
s2.pop();
// cout<<t2.top()<<endl;
}
while(!t1.empty() and !t2.empty())
{
if(t1.top()==t2.top())
{
// cout<<t1.top()<<" "<<t2.top()<<endl;
ans++;
}
// cout<<"^^^"<<t1.top()<<" "<<t2.top()<<endl;
t1.pop();
t2.pop();
}
}
}
double io;
cin>>io;
cout<<int(ans*60.0/io+0.5);
}