1112 Stucked Keyboard

题意:坏掉的键若被按下,总是重复打出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 0

int 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

时间: 2024-11-02 02:52:03

1112 Stucked Keyboard的相关文章

PAT 1112 Stucked Keyboard

On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the characters corresponding to those keys will appear repeatedly on screen for k times. Now given a resulting string on screen, you are supposed to list all

PAT 甲级 1112 Stucked Keyboard

https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960 On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the characters corresponding to those keys will appear repeatedly on screen for 

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

题意:给定一个k,键盘里有些键盘卡住了,按一次会打出k次,要求找出可能的坏键,按发现的顺序输出,并且输出正确的字符串顺序. map<char,int>用来标记一个键是否为坏键,一开始的时候都为0,表明所有的键为坏键. 然后遍历每个字符,统计当前字符连续出现的次数cnt,则只要存在cnt%k!=0,则表明为好键,另其map=1. 最后再for一遍字符串,存储坏键字符串和正确字符串,最后输出即可. #include <iostream> #include <cstdio>

PAT (Advanced Level) 1112. Stucked Keyboard (20)

找出一定没问题的字符(即一连串的额字符x个数能被k整除的),剩下的字符都是可能有问题的. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<queue> #include<stack> #include<algorithm> using namespace std; int k;

1112 Stucked Keyboard (20分)(字符串)

题意: 输入一个正整数K(1<K<=100),接着输入一行字符串由小写字母,数字和下划线组成.如果一个字符它每次出现必定连续出现K个,它可能是坏键,找到坏键按照它们出现的顺序输出(相同坏键仅输出一次,数据保证必定存在坏键),接着输出将坏键修好后原本的字符串(K个连续坏键只输出一次). trick: 测试点1答案错误原因:出现次数为K的倍数而不是大于等于K 测试点2,3错误原因:输出原字符串时没有检验最后一段连续相同字符是否为坏键(循环当中没有检验这一段) AAAAAccepted code:

PAT_A1112#Stucked Keyboard

Source: PAT A1112 Stucked Keyboard (20 分) Description: On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the characters corresponding to those keys will appear repeatedly on screen for k times. Now given a re

PAT A1112 Stucked Keyboard (20 分)——字符串

On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the characters corresponding to those keys will appear repeatedly on screen for k times. Now given a resulting string on screen, you are supposed to list all

A题目

1 1001 A+B Format(20) 2 1002 A+B for Polynomials(25) 3 1003 Emergency(25) 4 1004 Counting Leaves(30) 5 1005 Spell It Right(20) 6 1006 Sign In and Sign Out(25) 7 1007 Maximum Subsequence Sum(25) 8 1008 Elevator(20) 9 1009 Product of Polynomials(25) 10

CSU 1112: 机器人的指令【模拟题】

1112: 机器人的指令 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1858  Solved: 682 [Submit][Status][Web Board] Description 数轴原点有一个机器人.该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置. ·LEFT:往左移动一个单位 ·RIGHT: 往右移动一个单位 ·SAME AS i: 和第i 条执行相同的动作.输入保证i 是一个正整数,且不超过之前执行指令数 In