【PAT甲级】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<<"\n";
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 }

 

posted @ 2020-02-11 00:38  sewage  阅读(322)  评论(0编辑  收藏  举报