P5587 打字练习

想发一篇较为简洁易懂的题解,代码看起来长,实际上还是很好理解的,而且很多对称着写就行了

一道字符串签到题,比赛的时候小蒟蒻调了一个小时都没调出来一直RE,坑点还是不少的(主要是我太水了)

  1. 听其他题解中说后50%的数据是范文中也有退格键的情况

  2. 边做边判断退格键是不行的,因为可能有多个退格键,删的不止当前的字符(边做边判断似乎也会WA后50%数据),可以用栈

  3. 计算时间t的时候应转为double再除以60,否则t<60时整除60为0,答案除以t会RE

如果使用字符数组的话可以用gets与strlen,但是the `gets' function is dangerous and should not be used.,似乎会WA一些点

做了这题对字符串的读入等操作基础还是有所巩固的。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
string a[10005],b[10005];
stack<char> aa,bb;//储存去除退格后的字符
int n,m,cnt,t,al,bl;
int main() {
for (n=1; ; n++) {
getline(cin,a[n]);
if (a[n][0]=='E' && a[n][1]=='O' && a[n][2]=='F' && a[n][3]=='\0') break;
}
for (m=1; ; m++) {
getline(cin,b[m]);
if (b[m][0]=='E' && b[m][1]=='O' && b[m][2]=='F' && b[m][3]=='\0') break;
} for (int i=1; i<n; i++) {
al=a[i].size(),bl=b[i].size(); while(!aa.empty()) aa.pop();
while(!bb.empty()) bb.pop(); for (int j=0; j<al; j++)
if (a[i][j]=='<') {
if (!aa.empty())
aa.pop();
} else aa.push(a[i][j]);//先扫一遍字符串,处理退格,将去除退格后的字符串存入栈 for (int j=0; j<bl; j++)
if (b[i][j]=='<') {
if (!bb.empty())
bb.pop();
} else bb.push(b[i][j]); while(aa.size()<bb.size()) bb.pop();
while(aa.size()>bb.size()) aa.pop();//调为相同长度再比较 while(!aa.empty()) {
if (aa.top()==bb.top()) cnt++;//统计答案
aa.pop(),bb.pop();
}
} scanf("%d",&t);
double time=1.0*t/60;
printf("%d",(int)(cnt/time+0.5));//四舍五入
}

题解 P5587 【打字练习】的更多相关文章

  1. 【LGR-060】洛谷10月月赛 I div.1&div.2

    Preface 一边打一边写作文打的像shit,T2失智严重特判错了233 Orz Div1 Rank2的foreverlastnig聚聚,顺便说一句显然Luogu的比赛质量比以往显著提高了啊 以下题 ...

  2. vijos1760题解

    题目: 现在有n个人,题目给出了他们每个人所在市县的编号.他们站在一个从左向右的队伍中.小L不在队列中.他想找到一个长度不超过D的区域,使他能够找到最多的不同地方的朋友.要求输出能找到的朋友所在不同市 ...

  3. 一些noip模拟题一句话题解

    Problem A: 序列 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 12  Solved: 9[Submit][Status][Web Boar ...

  4. 【AC自动机】【树状数组】【dfs序】洛谷 P2414 [NOI2011]阿狸的打字机 题解

        这一题是对AC自动机的充分理解和树dfs序的巧妙运用. 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. 题目描述 打字机上只有28个按键,分别印有26个小写英文字母和' ...

  5. 【题解】P4886快递员

    [题解]P4886 快递员 淀粉质好题!!!加深了我对点分治的理解.最近分治学了好多啊. 题目大意 给定你一颗有边权的树,再给你\(m\)和点对,请你在树上选出来一个点,使得所有点对到这个点的距离的最 ...

  6. 题解 最长上升序列2 — LIS2

    最长上升序列2 - LIS2 Description 已知一个 1 ∼ N 的排列的最长上升子序列长度为 K ,求合法的排列个数. Input 输入一行二个整数 N , K ( K ≤ N ≤ 15) ...

  7. CSS 实现打字效果

    JS实现 最近做项目的时候需要实现一个字符逐个出现的打字效果,在网上一搜有个不错的jQuery插件Typed.js,效果很赞 <div class="element"> ...

  8. javascript实现键盘自动打字效果

    最近在网上看到一个字符逐个出现的打字效果,觉得挺有趣的,想一想基本实现思路就是设置一个定时器逐然后逐个向容器中添加字符,于是就基于jQuery写了一个简单版的. <!DOCTYPE html&g ...

  9. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

随机推荐

  1. Ubuntu18.04安装mysql(AWS云)

    1.执行如下三条命令 sudo apt-get install mysql-server sudo apt install mysql-client sudo apt install libmysql ...

  2. linux--nginx学习

    nginx 1.nginx安装编译 1.yum install nginx(自动解决依赖) 2.源代码编译安装(优秀,自由选择软件版本,自定义第三方功能比如开启https) 3.rpm手动安装(垃圾) ...

  3. jenkins - docker搭建jenkins

    jenkins镜像拉取 docker pull jenkins/jenkins 为jenkins镜像分配容器 docker run -d --name jenkins \ -p 8080:8080 \ ...

  4. MongoDB一些应用知识点

    1.在生产环境中至少需要三个节点的复制集架构. 2.在多数的场景中WT引擎比MMAPv1更加出色. 3.要想达到极致的速度,那么一定要给MongoDB足够的内存. 4.避免使用短链接,充分利用连接池, ...

  5. 辣些数据结构的思维题(思维题好难一个都不会TAT)

    洛谷P1268 树的重量 我觉得难点在于把每个叶子节点想象成分出来的叉 然后如果c是a--b这条边上分出来的,可以通过Dab,Dca,Dcb算出分叉边的长度, 长度=(Dac+Dbc-Dab)/2 怎 ...

  6. git本地仓库远程仓库地址更改

    git remote rm origingit remote add origin git@52.82.8.87:iot3.0-service/test.gitgit push -u origin - ...

  7. Spring Boot2 快速入门教程-到上手

    Spring Boot2 教程合集 入门 纯 Java 代码搭建 SSM 环境 创建一个 Spring Boot 项目的三种方法 理解 Spring Boot 项目中的 parent 基础配置 配置文 ...

  8. 2020牛客寒假算法基础集训营6 I.导航系统 (最小生成树)

    https://ac.nowcoder.com/acm/contest/3007/I 题中给定的图必定是一棵树 容易发现,如果将输入的N(N-1)个距离看做N(N-1)条无向边的话,那么如果数据合法, ...

  9. Win10 JDK 环境变量配置

    1.安装JDK 到指定的目录 2.配置环境变量 2.1   配置 CLASSPATH    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 2. ...

  10. 关于强类型、ViewData

    对于ASP.NET MVC中页面强类型的个人理解   进入ASP.NET MVC学习 发现很多和winfrom不同的东西,但是利用的C#语言还是没有变化,更多的是利用了新的语言,html jquery ...