P5587 打字练习

news/2024/12/21 23:47:26/

在这里插入图片描述
在这里插入图片描述

思路:我对字符串掌握的并不好,所以这篇文章是借鉴另一位博主写的,在这里先感谢洛谷用户AC_duckling
然后,这道题难点是如何读入以及各种特殊情况的解决,不过相信看完代码大家不难理解。博主的快读函数也很用心,建议直接阅读博主文章(链接里第一个解法便是,因为无法单独查看)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
inline int read() {//最后如果有多余的行数,可以直接用快读省略掉int count = 0;char a = getchar();while (a < '0' || a>'9') {a = getchar();}while (a >= '0' && a <= '9') {count = count * 10 + a - '0';a = getchar();}return count;
}
int main() {char s[10005][10005];//去掉退格键后范文char wb[100005];//读入的原文char sr[100005];//读入的输入字符char nw[100005];//处理完退格键后的输入字符int now = 0, count = 0;//now表示范文的行数,ans表示正确的单词数while (1) {now++;gets(wb);if (wb[0] == 'E' && wb[1] == 'O' && wb[2] == 'F' && wb[3] == '\0') {break;}int len = strlen(wb);int ne = 0;//当前真正未删去的字符数量for (int j = 0; j < len; j++) {if (wb[j] == '<') {ne--;ne = max(0, ne);//忽略开头continue;}s[now][ne++] = wb[j];}}for (int i = 1; i < now; i++) {gets(sr);int len = strlen(sr);register int ne = 0;for (int j = 0; j < len; j++) {if (sr[j] == '<') {ne--;ne = max(0, ne);continue;}nw[ne++] = sr[j];}for (int j = 0; j < ne; j++) {//将去除退格键后的字串与范文对比if (nw[j] == s[i][j]) {count++;}}}int t = read();//快读忽略最后的EOF和多余的行数double min = 1.0 * t / 60;//所用的分钟printf("%d", (int)(count * 1.0 / min + 0.5));//四舍五入return 0;
}

侵删:https://www.luogu.com.cn/problem/solution/P5587


http://www.ppmy.cn/news/336715.html

相关文章

lm8333 ADP5587添加键盘背光代码

lm8333 & ADP5587添加键盘背光代码 https://blog.csdn.net/yqj1123/article/details/38821087?ops_request_misc%257B%2522request%255Fid%2522%253A%2522164281697016780366535760%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id164281…

hdu 5587 规律

题意&#xff1a;开始序列{1}; 一次变换{1&#xff0c;1&#xff0c;2}&#xff1b; 两次变换{1&#xff0c;1&#xff0c;2&#xff0c;1&#xff0c;2&#xff0c;2&#xff0c;3} 。。。 求s[n];题解&#xff1a;打表 S1&#xff0c;S2&#xff0c;S4&#xff0c;S8&#xf…

HDU 5587(Array-BigInteger)

一开始有一个数列{1}。每过一天&#xff0c;将他当天的数列复制一遍&#xff0c;放在数列尾&#xff0c;并在两个数列间用0隔开。将当天新产生的所有数字&#xff08;包括0&#xff09;全加1。这个数列的前M项和是多少&#xff1f; 推公式 注意BigInteger类的写法 import ja…

HDU 5587 Array (规律)

题意: 话说中文题目里有hint看hint就懂了 第一项永远为数字1&#xff0c;因此样例1输出1 第二天先复制一次&#xff0c;用0隔开&#xff0c;得到1,0,1&#xff0c;再把产生的数字加1&#xff0c;得到1,1,2&#xff0c;因此样例2输出前3项和1124. 第三天先得到1,1,2,0,1,1,2&…

hdu 5587 Array(高效)

题目链接&#xff1a;hdu 5587 Array 代码 #include <cstdio> #include <cstring> #include <algorithm>using namespace std; const int maxn 55; typedef unsigned long long ll;ll N, cnt[maxn5], sum[maxn5];ll solve (ll n) {int t maxn;ll ret 0,…

HDU 5587:Array

Array Accepts: 118 Submissions: 232 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) 问题描述 Vicky是个热爱数学的魔法师&#xff0c;拥有复制创造的能力。 一开始他拥有一个数列{1}。每过一天&#xff0c;他将他当天的数列复制一遍…

HDU 5587 Array 规律+递归

HDU 5587 题意:初始序列a为{1},操作:在序列a末尾添加一个0之后,复制一遍0前面的数 然后将0之后的数1(包括0). 现在对序列a重复操作100次.Q次询问 每次询问一个m 求出序列a前m个数之和, Q<2e3,m<1e16. 初始长度为1 每次操作后序列长度*21 len[i]2^i(i1) -1 容易知道第i次操…

hdu 5587 Array

题目链接&#xff1a;hdu 5587 前两周 bc 上的题了&#xff0c;因为赶大作业所以没有去打&#xff0c;看了下官方给出的思路&#xff0c;感觉好强大~~竟然能转化成求二进制数 1 的个数&#xff1a; 然后数位 dp 就行了&#xff0c; 1 #include<cstdio>2 #include<cstr…