1112 Stucked Keyboard (20分)(字符串)

题意:

输入一个正整数K(1

trick:

测试点1答案错误原因:出现次数为K的倍数而不是大于等于K

测试点2,3错误原因:输出原字符串时没有检验最后一段连续相同字符是否为坏键(循环当中没有检验这一段)

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include
 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;ii){
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;ii){
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;ii)
63         if(s[i]!='A')
64             cout<<s[i];
65     return 0;
66 }

 

你可能感兴趣的:(1112 Stucked Keyboard (20分)(字符串))