题意:坏掉的键若被按下,总是重复打出k次。比如,k为3,打出的序列如下——
thiiis iiisss a teeeeeest
坏掉的键是i和e,虽然iiisss中s也出现了3次,但它不是坏掉的键,因为在thiiis中,s值出现了一次,若s是坏掉的键,则每次必须都出现3次。
思路:【字符串处理】
遍历字符串,针对每个字符,统计其连续重复出现的个数(记为len)
1)若len%k==0,说明字符ch可能是坏键。注意,只是可能,并不一定是坏键。
2)若len%≠0,说明字符ch一定是好键。
我是这么处理的——初始化Hash[128]为-1,Hash[]的下标即字符的ASIIC码,可以直接把char类型的当做下标。若遇到情况(2),则可以确定该键是好键,标记Hash[ch]=1;若遇到情况(1),除了判断len%k,还要满足Hash[ch]!=1,即当且仅当字符ch满足len%k==0且确定它不是好键时,才断定它为坏键。处理如"aabbbaaa"的情况。

代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
#define GOOD 1
#define BAD 0int main()
{int k;cin>>k;string str;cin>>str;int Hash[128];fill(Hash,Hash+128,-1);int i=0;while(i<str.size()){int s=i;char ch=str[i];while(i<str.size() && str[i]==ch) i++;int len=i-s;if(len%k==0 && Hash[ch]!=GOOD)//当前字符ch恰出现k的整数倍次,且确定不是好键,针对如"aabbbaaa"        Hash[ch]=BAD;else         Hash[ch]=GOOD;}i=0;string oriStr;while(i<str.size()){oriStr+=str[i];if(Hash[str[i]]!=GOOD) {if(Hash[str[i]]==BAD){cout<<str[i];Hash[str[i]]=999;//避免坏键重复输出
            }i+=k;}else{i++;}}cout<<"\n"<<oriStr;return 0;
}

  

转载于:https://www.cnblogs.com/kkmjy/p/9589254.html

1112 Stucked Keyboard相关推荐

  1. 1112. Stucked Keyboard (20)

    1112. Stucked Keyboard (20) 注:如果存在这样的字符串,sss_sssaedsss_s,那么我们认为s是好键(次数为3),所以,在一开始,我们第一次访问的时候,不能马上确定哪 ...

  2. PAT甲级1112 Stucked Keyboard:[C++题解]卡住的键盘、双指针、去重

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析 双指针算法来统计连续出现的字符的次数,如果 %k 不为0说明不是卡住的字母,做好标记. 再次遍历字符串,坏的输出,顺便统计正常的字符串 ...

  3. 1112 Stucked Keyboard (20 分)【难度: 一般 / 知识点: 模拟】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960 刚开始先初始化都是坏的,然后遍历字符串如果一 ...

  4. PAT甲级题目翻译+答案 AcWing(数学)

    1059 Prime Factors (25 分) 题意 : 给一正整数,要求分解质因数 思路 : 使用is_first,来完成除了第一个质因数前都有*的效果 如果n=1,要特判 最后如果n>1 ...

  5. 刷PAT甲级的各题思路、细节以及遇到的问题记录

    1001 A+B Format (20分) 因为一定会用到字符串,而string非常好用,但是用的时候一定要注意不能越界访问,否则会在运行时出现abort() has been called. 100 ...

  6. 【PAT甲级】A1101-A1155刷题记录

    文章目录 (递推) A1101 Quick Sort (25 分) 0.23 (静态二叉树+遍历) A1102 Invert a Binary Tree (25 分) 0.51 (数学问题) A110 ...

  7. 【置顶】【PAT】PAT甲级题目及分类总结(持续更新ing)

    在2019年3月底,我决定考浙大计院,经过一个月还算凑合的学习,痛定思痛,决定整理整理自己的博客. 粗略估计,大概一个月的时间里我AC了31道题,大概用时40个小时上下,毕竟还要把大部分时间花在笔试上 ...

  8. 1112: 零起点学算法19——输出特殊值

    1112: 零起点学算法19--输出特殊值 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Submitted: 2193 ...

  9. 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988)

    例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988) 链表的应用 #include<iostream> # ...

最新文章

  1. 如何在Windows 10中创建电源选项快捷图标,快速设置笔记本电脑的节能模式
  2. Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit
  3. Django 使用 mysql 数据库连接
  4. db2 sql执行历史_5 个免费的在线 SQL 数据库环境,比Navicat 香!
  5. vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式
  6. 目录浏览器对话框控件 c# 1614822374
  7. Linux常用命令备忘(启动管理、文件或目录管理、系统管理)
  8. python运用列表编写水仙花数_Python 实现找出所有水仙花数的方法
  9. 数据结构习题--用双队列模拟栈及用栈逆置队列
  10. 程序员试用期被裁,只给半个月赔偿
  11. blender快捷键记录-基本所有场景通用
  12. iOS里的动态库和静态库
  13. Dos窗口的常见打开方式和常见命令
  14. 2020 年,从架构谈起,到 Mesh 结束
  15. matlab整流仿真,基于MATLAB的整流电路的建模与仿真
  16. CodeForces - 379E New Year Tree Decorations(暴力卡精度)
  17. windows下文件名太长无法删除
  18. -source 1.6 中不支持 diamond 运算符
  19. GDT(全居描述符表)和LDT(局部描述符表)
  20. Git版本控制管理——钩子

热门文章

  1. android 解决Error:This Gradle plugin requires Studio 3.0 minimum
  2. android 解决password过时
  3. android打包过程
  4. 关键字—final static const的区别
  5. Virtualenv系列(一):使用Virtualenv搭建python虚拟环境
  6. javascript的内置对象以及BOM(定时器,location)
  7. 如何实现不安装xpoedinstall激活xposed模块
  8. css_position
  9. JavaWeb——c:forEach varStatus=status
  10. linux ssh终端解决中文乱码的问题