6.25 C++学习
2026/6/26 10:14:12 网站建设 项目流程

P5587 打字练习

题目描述

R 君在练习打字。

有这样一个打字练习网站,给定一个范文和输入框,会根据你的输入计算准确率和打字速度。可以输入的字符有小写字母、空格和.(英文句号),输入字符后,光标也会跟着移动。

输入的文本有多行,R 君可以通过换行键来换行,换行后光标移动到下一行的开头。

R 君也可以按退格键(为了方便,退格键用<表示),以删除上一个打的字符,并将光标回移一格。特殊的,如果此时光标已经在一行的开头,则不能继续退格(即忽略此时输入的退格键)。

网站的比较方式遵循以下两个原则:

  • 逐行比较,即对于范文和输入的每一行依次比较,不同行之间不会产生影响,多余的行会被忽略。
  • 逐位比较,即对于两行的每一个字符依次比较,当且仅当字符相同时才会被算作一次正确,否则会被算作错误。计算答案时,只统计相同的字符个数。

需要注意的是,回车键不会被计入正确的字符个数。

R 君看到网站上显示他花了TTT秒完成了这次的打字游戏,请你计算出他的 KPM(Keys per minutes,每分钟输入的字符个数),答案四舍五入保留整数部分。

输入格式

R 君会依次告诉你网站的范文,他的输入和花费的时间。

其中范文和输入将会这样读入:给定若干行字符串,以单独的一行EOF结束,其中EOF不算入输入的文本。

最后一行一个整数TTT,表示他打字花费了TTT秒。

可以参考样例输入输出文件和样例解释辅助理解。

输出格式

一行一个整数,表示 KPM。

输入输出样例 #1

输入 #1

hello world. aaabbbb x EOF heelo world. aaacbbbb y<x EOF 60

输出 #1

18

说明/提示

样例解释

第一行的正确字符数为 11。
第二行的正确字符数为 6,错误的字符c仍会占据一个位置。
第三行的正确字符数为 1,R 君使用退格键删除了被打错的字符y

数据范围

对于20%20\%20%的数据,不存在换行键。
对于40%40\%40%的数据,不存在退格键。
对于100%100\%100%的数据,T≤103T \leq 10^3T103,保证每个文本段的总字符数(包括换行)不超过10510^5105个且总行数不超过10410^4104

我的解答:

#include<cstdio>#defineregregisterusingnamespacestd;chars1[200007],s2[200007],ch;//s1表示范文,s2表示打字练习输入的字符intcnt1,cnt2;intans;intt;//最后读入的时间intmain(){s1[0]=10;s2[0]=10;//ASCII码的10就等于'\n'表示换行符ch=getchar();//使用getchar加快速度while(ch!='F')//读到'F'的时候就是结束符EOF的最后一位了,所以应该跳出循环{if(ch=='<')//判断是否读入了退格符{if(s1[cnt1]!=10)//如果退格符前面不是换行符{cnt1--;//刚刚读入的字符需要删去,把当前序号--}ch=getchar();//重新读入一个字符continue;//继续}s1[++cnt1]=ch;//如果不是换行符,那么就存入s1数组ch=getchar();//继续读入}//范文读取完毕while((ch<'a'||ch>'z')&&ch!='.'){ch=getchar();}//为了防止读入无用字符,我们需要先把范文和实际输入之间的这些字符读取掉while(ch!='F')//同上,将实际输入存入s2数组{if(ch=='<'){if(s2[cnt2]!=10){cnt2--;}ch=getchar();continue;}s2[++cnt2]=ch;ch=getchar();}cnt1-=3;cnt2-=3;//由于我们刚刚读入时把"EOF"也同时存入了s1和s2数组,因此我们需要抛弃它们。所以cnt1和cnt2都要--for(reginti=1,j=1;i<=cnt1&&j<=cnt2;)//开始对比s1和s2{if(s1[i]==s2[j]&&s1[i]!=10)//如果s1和s2的这个字母相同并且s1的这个字符不是换行符{ans++;//正确输入的字符数量++}if(s1[i]==10)//如果范文需要换行{while(s2[j]!=10)//我们需要使读入的字符也跳到换行符{j++;}i++;//继续对比下一行j++;continue;}if(s2[j]==10)//同理,读入串需要换行也要都跳到下一行{while(s1[i]!=10){i++;}i++;j++;continue;}i++;j++;}scanf("%d",&t);//读入耗费的时间printf("%.0lf",(double)ans/(double)t*60);//题目要求四舍五入,所以使用printf%.0lf这样就会自动输出四舍五入的数字return0;//Byebye程序 qwq}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询