首页 > 其他分享 >P5587 打字练习

P5587 打字练习

时间:2024-02-03 09:11:06浏览次数:27  
标签:字符 int 样例 练习 打字 P5587 退格 输入

打字练习

题目描述

R 君在练习打字。

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

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

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

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

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

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

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

输入格式

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

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

最后一行一个整数 \(T\),表示他打字花费了 \(T\) 秒。

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

输出格式

一行一个整数,表示 KPM。

样例 #1

样例输入 #1

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

样例输出 #1

18

提示

样例解释

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

数据范围

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

分析
先考虑对数据进行处理,删除退格键<
之后再意义比较计数即可

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e4 + 10, INF = 0x3f3f3f3f;
int n, m;
string a[N], b[N];

int main() {
    // freopen("data.in", "r", stdin);
    while (getline(cin, a[++n]), a[n] != "EOF");
    while (getline(cin, b[++m]), b[m] != "EOF");
    int cnt = 0, time = 0;
    cin >> time;
    for (int i = 1; i < n && i < m; i++) {
        string str = a[i], s = b[i];
        // 对输入数据进行处理
        int p = str.find("<");
        while (p != -1) {
            if (p == 0) str.erase(p, 1);
            else str.erase(p - 1, 2);
            p = str.find("<");
        }

        p = s.find("<");
        while (p != -1) {
            if (p == 0) s.erase(p, 1);
            else s.erase(p - 1, 2);
            p = s.find("<");
        }
        // cout << str << "\n" << s << endl;
        int len = min(str.size(), s.size());
        for (int j = 0; j < len; j++) {
            if (str[j] == s[j] && s[j] != '<')
                cnt++;
        }
        // cout << cnt << endl;
    }
    cout << cnt * 60 / time;
    return 0;
}

标签:字符,int,样例,练习,打字,P5587,退格,输入
From: https://www.cnblogs.com/hellohebin/p/18004342

相关文章

  • 跟着王洋老师学编程 - 1.8 打字母游戏
    案例简述在一个300*400的窗体上,有10个随机产生的字母向下落,在键盘上敲字母,如果对了就消掉,初始成绩为1000分,每敲对一个字母加10分,如果字母落到屏幕下方,或者敲错扣100分。我的思路-创建一个窗体-创建一个字母画布类——继承画布类Panel、编写构造方法以初始化数据,实现多线程......
  • C++编程练习||创建一个名为Rational的类,进行分数运算。
    题目:创建一个名为Rational的类,进行分数运算。创建一个名为Rational的类,进行分数运算。用整数变量表示类的private数据-numerator(分子)和denominator(分母)。提供一个带默认值的构造函数,并且它应该以简化的形式保存分数。例如分数2/4应在对象中保存为numerator为1,denominator为2的形式。......
  • C++编程练习||Account类:创建一个名为Account的类,银行可以使用它表示客户的银行帐户||I
    1.Account类题目:创建一个名为Account的类,银行可以使用它表示客户的银行帐户。这个类应该包括一个类型为double的数据成员,表示帐户余额。这个类提供一个构造函数,它接受初始余额并用它初始化数据成员。这个构造函数应当确认初始余额的有效性,保证它大于或等于0。否则,余额应设置为0......
  • JAVA数组练习代码
    一维数组的有序插入思路代码点击查看代码importjava.util.Scanner;/***@authorLittleBear*@date2024-02-02-16:57*/publicclassseqInsertion{publicstaticvoidmain(String[]args){System.out.println("pleaseinputyournum:");......
  • [NOI2011] 阿狸的打字机
    把询问全部放到树上,离线dfs处理点击查看代码#include<bits/stdc++.h>usingnamespacestd;strings;intt[100005][26],tot,cnt,r[100005],fa[100005],fail[100005],dfn[100005],w[100005],sum,ans[100005];boolb[100005];vector<int>a[100005];vector<int>o[1000......
  • 【2024.02.02】构图练习(糖水肖像)
    图源糖水日记作者的午饭饭,侵删采用摄影师泰罗所说的描绘法去观察每一张图的构图与线条可以观察到除非是夜景,一般来说感光度都会拉很低,避免噪点光圈值一般都会控制在2附近及以下,为了达到更好的的一个背景虚化效果说实话描绘了几张后感觉背景确实不是那么重要,只要控制好前景部分......
  • 2.1 蓝桥杯练习5题
    2.1蓝桥杯练习5题1.[P8623蓝桥杯2015省B]移动距离题意:X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为$1,2,3,\cdots$。当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为\(6\)时,开始情形如下:12345612111098......
  • 1.31 蓝桥杯练习5题
    1.31蓝桥杯练习5题退役哩,但是下学期还要打蓝桥。好久没写题脑袋空空,准备每天写几个练手。1.[P8599蓝桥杯2013省B]带分数题意:\(100\)可以表示为带分数的形式:\(100=3+\frac{69258}{714}\)。还可以表示为:\(100=82+\frac{3546}{197}\)。注意特征:带分数中,数字\(1......
  • 2024年1月31日练习答案
    目录P505【基础】寻找祖先P541【基础】吃西瓜(watermelon)P832【提高】AtoBP841【入门】s01串P505【基础】寻找祖先给出充足的父子关系,请你编写程序找到某个人的最早的祖先。规定每个人的名字都没有空格,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数......
  • 美赛2023C练习-做题笔记
    代码:clc;TC=ProblemCDataWordle;%数据处理noC=TC(:,1);wordC=TC(:,2);dataC=TC(:,3:11);no=cell2mat(noC);data=cell2mat(dataC);L=size(wordC);L=L(1);word=[];%原表格有错误,根据网络数据进行修正wordC{36}="clean";wordC{247}="trash";%修正endfori=1:L......