1112 Stucked Keyboard (20分)(字符串)
Posted ldudxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1112 Stucked Keyboard (20分)(字符串)相关的知识,希望对你有一定的参考价值。
题意:
输入一个正整数K(1<K<=100),接着输入一行字符串由小写字母,数字和下划线组成。如果一个字符它每次出现必定连续出现K个,它可能是坏键,找到坏键按照它们出现的顺序输出(相同坏键仅输出一次,数据保证必定存在坏键),接着输出将坏键修好后原本的字符串(K个连续坏键只输出一次)。
trick:
测试点1答案错误原因:出现次数为K的倍数而不是大于等于K
测试点2,3错误原因:输出原字符串时没有检验最后一段连续相同字符是否为坏键(循环当中没有检验这一段)
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 char ans[1007]; 5 int vis[1007]; 6 int main(){ 7 ios::sync_with_stdio(false); 8 cin.tie(NULL); 9 cout.tie(NULL); 10 int k; 11 cin>>k; 12 cin.ignore(); 13 string s; 14 getline(cin,s); 15 int num=0; 16 int cnt=1; 17 for(int i=1;i<s.size();++i){ 18 if(s[i]==s[i-1]) 19 ++cnt; 20 else{ 21 if(cnt%k==0&&!vis[s[i-1]-NULL]) 22 ans[++num]=s[i-1],vis[s[i-1]-NULL]=2; 23 else if(cnt%k) 24 vis[s[i-1]-NULL]=1; 25 cnt=1; 26 } 27 } 28 if(cnt%k==0&&!vis[s[s.size()-1]-NULL]) 29 ans[++num]=s[s.size()-1],vis[s[s.size()-1]-NULL]=2; 30 else if(cnt%k) 31 vis[s[s.size()-1]-NULL]=1; 32 cnt=1; 33 for(int i=1;i<=num;++i) 34 if(vis[ans[i]-NULL]==2) 35 cout<<ans[i]; 36 cout<<" "; 37 for(int i=1;i<s.size();++i){ 38 if(s[i]==s[i-1]) 39 ++cnt; 40 else{ 41 if(cnt%k==0&&vis[s[i-1]-NULL]==2){ 42 int flag=0; 43 while(cnt>=k){ 44 cnt-=k; 45 for(int j=i-1-flag*k;j>i-k-flag*k;--j) 46 s[j]=‘A‘; 47 ++flag; 48 } 49 } 50 cnt=1; 51 } 52 } 53 if(cnt%k==0&&vis[s[s.size()-1]-NULL]==2){ 54 int flag=0; 55 while(cnt>=k){ 56 cnt-=k; 57 for(int j=s.size()-1-flag*k;j>s.size()-k-flag*k;--j) 58 s[j]=‘A‘; 59 ++flag; 60 } 61 } 62 for(int i=0;i<s.size();++i) 63 if(s[i]!=‘A‘) 64 cout<<s[i]; 65 return 0; 66 }
以上是关于1112 Stucked Keyboard (20分)(字符串)的主要内容,如果未能解决你的问题,请参考以下文章
PAT A1112 Stucked Keyboard (20 分)——字符串
1112 Stucked Keyboard (20 分)难度: 一般 / 知识点: 模拟
PAT (Advanced Level) 1112. Stucked Keyboard (20)