1112 Stucked Keyboard

#include<iostream>

#include<map>

#include<set>

#include<string>

using namespace std;

bool sureNobroken[256];

int main(){

int k,cnt=1;

cin>>k;//字符出现次数的阈值

string s;

cin>>s;

map<char,bool>m;//记录是否为坏键

set<char>printed;//记录已经输出的字符

char pre='#';

s=s+'#';

//第一次遍历,标记可能坏掉的键

for(int i=0;i<s.length();i++){

if(s[i]==pre){

cnt++;

}else{

//如果连续出现的不是k的倍数,说明不是坏键

if(cnt%k!=0){

sureNobroken[pre]=true;

}

cnt=1;

}

//如果当前出现的字符数是k的倍数,表示其为坏键

if(i!=s.length()-1){

m[s[i]]=(cnt%k==0);

}

pre=s[i];//更新前一个字符

}

//第二次遍历,修正标记

for(int i=0;i<s.length()-1;i++){

if(sureNobroken[s[i]]){

m[s[i]]=false;

}

}

//输出所有坏键

for(int i=0;i<s.length()-1;i++){

if(m[s[i]]&&printed.find(s[i])==printed.end()){

cout<<s[i];

printed.insert(s[i]);

}

}

cout<<endl;

//输出修正后的字符

for(int i=0;i<s.length()-1;i++){

cout<<s[i];

if(m[s[i]]){

i=i+k-1;

}

}

return 0;

}

相关推荐
roman_日积跬步-终至千里2 小时前
【计算机算法与设计(14)】例题五:最小生成树:Prim算法详细解释:π的含义、更新逻辑和选点原因
算法
让学习成为一种生活方式2 小时前
压缩文件夹下下所有文件成压缩包tar.gz--随笔016
算法
嗷嗷哦润橘_2 小时前
AI Agent学习:MetaGPT项目之RAG
人工智能·python·学习·算法·deepseek
三月微暖寻春笋2 小时前
【和春笋一起学C++】(五十一)复制构造函数
c++·复制构造函数·显式复制构造函数·隐式复制构造函数
不忘不弃2 小时前
指针元素的使用
算法
he___H2 小时前
滑动窗口一题
java·数据结构·算法·滑动窗口
AI科技星2 小时前
统一场论质量定义方程:数学验证与应用分析
开发语言·数据结构·经验分享·线性代数·算法
ULTRA??2 小时前
KD-Tree的查询原理
python·算法
mahuifa2 小时前
(46)VTK C++开发示例 --- 加载CML文件
c++·3d·vtk·cml