题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960
参考:https://blog.csdn.net/qq_34594236/article/details/68200192

这题有点麻烦,主要是建立两个数组,一个是绝对好的,另一个是已经输出过的坏的

代码

  1. #include<cstdio>
  2. #include<string>
  3. #include<iostream>
  4. #include<vector>
  5. using namespace std;
  6. int k;
  7. string s;
  8. vector<int> v(500); // 一定好的
  9. vector<int> vis(500, 0); // 访问过的坏键盘
  10. int main(){
  11. scanf("%d", &k);
  12. cin >> s;
  13. for(int i = 0; i < s.size(); i++){
  14. v[s[i]] = 0;
  15. v[s[i]] = 0;
  16. }
  17. char pre = '#';
  18. s += '#';
  19. int count = 1;
  20. for(int i = 0; i < s.size(); i++){
  21. if(s[i] == pre){
  22. count++;
  23. } else {
  24. if(count % k != 0){
  25. v[pre]++;
  26. }
  27. count = 1;
  28. }
  29. pre = s[i];
  30. }
  31. for(int i = 0; i < s.size() - 1; i++){
  32. if(v[s[i]] == 0 && vis[s[i]] == 0) {
  33. cout << s[i];
  34. vis[s[i]]++;
  35. }
  36. }
  37. cout << endl;
  38. for(int i = 0; i < s.size() - 1; i++){
  39. cout << s[i];
  40. if(v[s[i]] == 0){
  41. i = i + k - 1;
  42. }
  43. }
  44. return 0;
  45. }