1112. Stucked Keyboard (20)
注:如果存在这样的字符串,sss_sssaedsss_s,那么我们认为s是好键(次数为3),所以,在一开始,我们第一次访问的时候,不能马上确定哪些键是坏键,哪些键是好键,所以不能进行在线处理;
解决这道题的做法是先对整个字符串进行访问,确定出哪些好键,因为只要出现连续的次数不是k的整数倍,那么,一定是好键
#include <stdio.h>
#include <string.h>
int main()
{int times,len,isWell[178]={0},isStucked[178]={0};char sample[1000+10],ch,ans[1000+10],w[178];scanf("%d",×);getchar();gets(sample);len=strlen(sample);for(int i=0;i<len;){int s=i+1,count=1;while(sample[s]==sample[i]&&s<len){++count;++s;}if(count%times)isWell[sample[i]-'\0']=1;i=s;}int k=0,m=0,cnt=0;ch=sample[0];for(int i=0;i<len;++i){if(isWell[sample[i]-'\0'])ans[k++]=sample[i];else{ch=sample[i];while(ch==sample[i]&&i<len){++i;++cnt;}--i;if(isStucked[ch-'\0']==0){w[m++]=ch;isStucked[ch-'\0']=1;}cnt/=times;while(cnt--)ans[k++]=ch;cnt=0;}}w[m++]='\n';ans[k++]='\0';for(int i=0;i<m;++i)printf("%c",w[i]);puts(ans);return 0;
}