[Luogu]P5587 打字练习

news/2024/10/8 21:26:47/

[Luogu]P5587 打字练习

题目链接:

https://www.luogu.com.cn/problem/P5587

解题思路:

字符串处理,考虑多种可能情况:

  1. 范文和输入均可能存在退格没见过范文还带退格的艹

  2. 计算KPM的时候分母可能为0

  3. 输入的行数可能比范文的短或长。

输入输出样例

Input1:

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

Output1:

18

Input2:

<<qwe
EOF
<<qwe
EOF
60

Output2:

3

Input3:

<qwe
EOF
qw<e
EOF
60

Output3:

1

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
#include<cmath>
#include<set>
#define INF 0x3f3f3f3f typedef long long ll;
using namespace std;int count(string a,string b){int ans=0;int length;vector<char> c;vector<char> d;length=a.length();for(int i=0;i<length;i++){if(a[i]=='<' && !c.empty())  c.pop_back();else{if(a[i]!='<')c.push_back(a[i]);}}length=b.length();for(int i=0;i<length;i++){if(b[i]=='<' && !d.empty())  d.pop_back();else{if(b[i]!='<')d.push_back(b[i]);}}length = min(c.size(),d.size());for(int i=0;i<length;++i)ans+= (c[i]==d[i]);return ans;
}
int main() {int n=0;int i=0;int time = 0;double ans=0.0;string str;string a[100005];while(1){getline(cin,str);if(str!="EOF")  a[n++]=str;else      break;}while(1){getline(cin,str);if(str!="EOF"){if(i<n)  ans+=count(a[i++],str);else     continue;}elsebreak;}cin >> time;cout << (int)((ans*60/time)+0.5);
}

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

相关文章

刷算法第八天——P1012 拼数+P5587 打字练习

P1012 拼数 // import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int t scanner.nextInt();String[] arr new String[t];for (int i 0; i < t; i) {arr[i] sca…

P5587 打字练习

思路&#xff1a;我对字符串掌握的并不好&#xff0c;所以这篇文章是借鉴另一位博主写的&#xff0c;在这里先感谢洛谷用户AC_duckling 然后&#xff0c;这道题难点是如何读入以及各种特殊情况的解决&#xff0c;不过相信看完代码大家不难理解。博主的快读函数也很用心&#xf…

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;他将他当天的数列复制一遍…