zoukankan      html  css  js  c++  java
  • 题解 P5587 【打字练习】

    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]=='') 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]=='') 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));//四舍五入
    }
    
  • 相关阅读:
    Seq_file文件系统实例剖析
    linux 网卡接收多播MAC(01:08开头)
    linux-3.14.13 看到mpls gso支持
    /usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’
    gcc编译参数-fPIC的一些问题
    glibc-2.15编译error: linker with -z relro support required
    no CONFIG_BQL
    if_nametoindex可以检查网卡名称是否有效
    剑指offer(10)
    剑指Offer(9)
  • 原文地址:https://www.cnblogs.com/Randolph68706/p/11824198.html
Copyright © 2011-2022 走看看