zoukankan      html  css  js  c++  java
  • A1112 Stucked Keyboard (20分)

    一、技术总结

    1. 本题考察C++标准模板库STL的使用,使用到的有map、set、string。
    2. 题意是首先给出一个数字k,代表一个坏键的重复打印出现的次数k,然后给出一串字符串,然后需要我们判断该字符串中坏键有哪些。
    3. 首先需要使用string将该字符串存储起来,string类型的字符串只能够使用cin输入cout输出整个输出,需要注意,但是可以一个一个字符使用printf输出。
    4. 然后遍历该字符串,我们需要设置map<char, bool>类型的来判断该字符是否为坏键,依次遍历该字符串,如果字符出现次数为k的倍数,那么就设置为坏键,否者在map中不是。
    5. 上面这会出现一个问题,如果一个键不是坏键,但是打印的次数恰好大于等于k,那么可能误判为坏键,因此需要额外设置一个bool类型的数组,一旦一个字符出现后,没有打印k的倍数,就一定不是坏键。因此需要将该数组和map一起判断字符键是否为坏键。
    6. 最后就是遍历字符串,将坏键输出,如果输出过,就将该字符放入set集合中,防止二次输出。
    7. 最后就是输出正常的字符串,一旦遇到坏键,跳过k-1位继续输出。

    二、参考代码

    #include<bits/stdc++.h>
    using namespace std;
    map<char, bool> m;//用于记录字符是否为坏键,如果是则为true,否则为false 
    set<char> printed;//用于存储看坏键是否已经输出
    bool NosureBroken[256];
    
    int main(){
    	int k, cnt = 1;
    	string s;
    	scanf("%d", &k);
    	cin >> s;
    	char pre = '#';
    	s += '#';
    	for(int i = 0; i < s.length(); i++){
    		if(s[i] == pre){
    			cnt += 1;
    		}else{
    			if(cnt % k != 0){
    				NosureBroken[pre] = true;
    			}
    			cnt = 1;
    		}
    		if(i != s.length() - 1) m[s[i]] = (cnt % k == 0);
    		pre = s[i];
    	}
    	for(int i = 0; i < s.length() - 1; i++){
    		if(NosureBroken[s[i]] == true){
    			m[s[i]] = false;
    		}
    	}
    	for(int i = 0;i < s.length() - 1; i++){
    		if(m[s[i]] && printed.find(s[i]) == printed.end()){
    			printf("%c", s[i]);
    			printed.insert(s[i]);
    		}
    	}
    	printf("
    ");
    	for(int i = 0; i < s.length() - 1; i++){
    		printf("%c", s[i]);
    		if(m[s[i]]){
    			i = i + k - 1;
    		} 
    	}
    	return 0;
    } 
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    python基础之面向对象OOP
    python基础之多线程的操作
    python基础之文件的读取
    Oracle SQL Developer查询结果生成(导出)SQL文件/语句
    Oracle某条资料被锁如何解锁 (ScriptRunner,v$locked_object,SID和SERIAL#)
    一行代码可以做什么?
    Linux命令后面加 & 的作用
    使用Putty + Xming 远程登录Linux显示图形化界面
    Oracle ROWNUM用法
    oracle实现分页功能 limit功能例子
  • 原文地址:https://www.cnblogs.com/tsruixi/p/12983681.html
Copyright © 2011-2022 走看看