题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960

这道题初次写的时候,思路也就是考虑从头到尾遍历一遍,然后如果一个字符重复出现k的倍数次的话,那么这个键就是坏的。

但是这样做交了一发是错的。

后来一想,如果 k = 3,然后出现了aaaba这样一个字符串,那我们并不能仅仅凭a出现了3次就认为a是一个坏键,因为如果它是坏键,那么每一次它在字符串中出现的时候出现的次数都会是k的倍数。

所以思路就变得稍微复杂一些了,用c++ stl中的set来辅助一下,多遍历一遍,第一遍遍历,将出现了k的倍数次的字符放进set中,第二次遍历,如果该字符在set中,并且该字符在某处连续出现的次数不是k的倍数,就可以判断它肯定不是坏键,则要将其取出set。set中的元素表示的就是坏键。

最后再遍历一遍,按照这些字符在字符串中出现的顺序,将坏键放入数组中。

最后一遍遍历,输出原序列。也就是对于坏键,只输出一次,然后就跳过那些因为坏键而多输出的字符,继续输出下面的字符即可。

至于如何求某个字符在某个位置连续出现的长度,就像上一篇博客,天梯赛L1-058 6翻了 一样,从后往前扫一遍,如果s【i】 == s【i+1】,那么a【i】= a【i+1】,否则a【i】就直接等于1。

代码题解:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005;
const int INF = 0x3f3f3f3f;
int k,N,mlen = INF;
string s;
int a[1005];
char seq[1005],p[1005];
int cnt = 0,num = 0;
set<char> ss,aa;
int main(){
#ifndef ONLINE_JUDGE
// freopen("in.txt","r",stdin);
#endif
scanf("%d",&k);
cin>>s;
int len = s.length();
a[len-1] = 1;
for(int i=len-2;i>=0;i--){
if(s[i] == s[i+1]) a[i] = a[i+1] + 1;
else a[i] = 1;
}
for(int i=0;i<len;){
if(a[i] % k == 0){
aa.insert(s[i]);
i += a[i];
}
else i++;
}
for(int i=0;i<len;){
if(aa.count(s[i])){
if( a[i] % k != 0 )
aa.erase(s[i]);
i += a[i];
}
else i++;
}
for(int i=0;i<len;){
p[num++] = s[i];
if(aa.count(s[i])){
if(!ss.count(s[i])){
ss.insert(s[i]);
seq[cnt++] = s[i];
}
i += k;
}
else i++;
}
for(int i=0;i<cnt;i++){
cout<<seq[i];
}cout<<endl;
for(int i=0;i<num;i++){
cout<<p[i];
}cout<<endl;
return 0;
}

PAT甲级 1112 Stucked Keyboard的更多相关文章

  1. PAT甲级——1112 Stucked Keyboard (字符串+stl)

    此文章同步发布在我的CSDN上:https://blog.csdn.net/weixin_44385565/article/details/90041078   1112 Stucked Keyboa ...

  2. PAT 甲级 1112 Stucked Keyboard

    https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960 On a broken keyboard, ...

  3. PAT甲级——A1112 Stucked Keyboard【20】

    On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the char ...

  4. PAT 1112 Stucked Keyboard

    1112 Stucked Keyboard (20 分)   On a broken keyboard, some of the keys are always stucked. So when yo ...

  5. PAT 1112 Stucked Keyboard[比较]

    1112 Stucked Keyboard(20 分) On a broken keyboard, some of the keys are always stucked. So when you t ...

  6. 1112 Stucked Keyboard (20 分)

    1112 Stucked Keyboard (20 分) On a broken keyboard, some of the keys are always stucked. So when you ...

  7. 【刷题-PAT】A1112 Stucked Keyboard (20 分)

    1112 Stucked Keyboard (20 分) On a broken keyboard, some of the keys are always stucked. So when you ...

  8. 【PAT甲级】1112 Stucked Keyboard (20分)(字符串)

    题意: 输入一个正整数K(1<K<=100),接着输入一行字符串由小写字母,数字和下划线组成.如果一个字符它每次出现必定连续出现K个,它可能是坏键,找到坏键按照它们出现的顺序输出(相同坏键 ...

  9. PAT甲题题解-1112. Stucked Keyboard (20)-(map应用)

    题意:给定一个k,键盘里有些键盘卡住了,按一次会打出k次,要求找出可能的坏键,按发现的顺序输出,并且输出正确的字符串顺序. map<char,int>用来标记一个键是否为坏键,一开始的时候 ...

随机推荐

  1. 22、正则表达式(用于三剑客grep,awk,sed,内容中包含空行)

    简单的说就是为处理大量的字符串而定义的一套规则和方法,通过定义特殊符号的辅助,系统管理员就可以快速过滤,替换城输出需要的字符串 : ^:^word 表示匹配以什么字符开头的内容: $:word$表示匹 ...

  2. 16、lamp的搭建

    搭建web02服务器作为web01的负载均衡服务器: httpd和nginx配置比较相似,也有虚拟主机,一个http服务需要配置多个站点,基于ip(基本用不到).端口(内部网站).域名(外部网站): ...

  3. 精尽Spring Boot源码分析 - 配置加载

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  4. POJ 2947 2947 Widget Factory 高斯消元

    给出组件的数量n,给出记录的数量m(n就是变元数量,m是方程数量).每一个记录代表一个方程,求每个组件的生产天数. 高斯消元即可 #include <cstdio> #include &l ...

  5. AcWing 1127. 香甜的黄油

    农夫John发现了做出全威斯康辛州最甜的黄油的方法:糖. 把糖放在一片牧场上,他知道 N 只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油. 当然,他将付出额外的费用在奶牛上. 农夫John很狡猾, ...

  6. Java:Java实例化(new)过程

    实例化过程(new) 1.首先去JVM 的方法区中区寻找类的class对象,如果能找到,则按照定义生成对象,找不到 >>如下2.所示 2.加载类定义:类加载器(classLoader)寻找 ...

  7. Python 删除满足条件的某些行

    数据: data 字段:col 要删除的内容是 col == False 的行 # 方案一 data1 = data[~data['col'] == False] # ~ 取反 # 方案二 保留 da ...

  8. Django基础008--model多对多

    1.多对多表结构设计 class Student(models.Model): name = models.CharField(verbose_name='学生名字',max_length=100) ...

  9. python exec()函数

    ''' 函数的作用: 动态执行python代码.也就是说exec可以执行复杂的python代码,而不像eval函数那样只能计算一个表达式的值. exec(source, globals=None, l ...

  10. 【LeetCode】54. 螺旋矩阵

    54. 螺旋矩阵 知识点:数组: 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 输入:matrix = [[1,2,3],[4,5, ...