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

在这里插入图片描述
https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960
刚开始先初始化都是坏的,然后遍历字符串如果一段相同的字符串的长度不可以整除k,那么就是好的。

#include<bits/stdc++.h>
using namespace std;
int k;
string s;
map<char,int>st,hush;
int main(void)
{
    
    
    for(int i=0;i<10;i++) st['0'+i]=-1;
    for(int i=0;i<26;i++) st['a'+i]=-1;
    st['_']=-1;
    cin>>k>>s;
    for(int i=0;i<s.size();i++)
    {
    
    
        int j=i;
        while(j+1<s.size()&&s[i]==s[j+1]) j++;
        if((j-i+1)%k) st[s[i]]=0;//是好的
        i=j;
    }
    for(int i=0;i<s.size();i++)
        if(!hush[s[i]]&&st[s[i]]==-1) cout<<s[i],hush[s[i]]++;//是坏的且首次出现
    cout<<endl;
    for(int i=0;i<s.size();i++)
    {
    
    
        cout<<s[i];
        if(hush[s[i]])//是坏的
        {
    
    
        	int j=i+k-1;//直接跳过重复的
    		i=j;
        }
    }
}

Guess you like

Origin blog.csdn.net/qq_46527915/article/details/121449827