题意:输入k,代表坏的键会连续输入k次,输入一个字符串s,问哪些键坏了,并输出正确的字符。
思路:只要之前或之后出现的字符次数不会被k整除就好。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
using namespace std;
const int MAX_N = 1010;
int k, len, cnt;
char s[MAX_N];
char c;
map<char, bool> mp;
set<char> st;
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
scanf("%d", &k);
scanf("%s", s);
len = strlen(s);
s[len] = '#';
c = s[0]; cnt = 1;
for (int i = 1; i <= len; i++) {
if (c == s[i]) {
cnt++;
if (cnt % k == 0 && mp[s[i]] != true) {
mp[s[i]] = false;
}
} else {
if (cnt % k != 0) {
mp[c] = true;
}
cnt = 1; c = s[i];
}
}
for (int i = 0; i < len; i++) {
if (!mp[s[i]] && !st.count(s[i])) {
printf("%c", s[i]);
st.insert(s[i]);
}
}
printf("\n");
for (int i = 0; i < len; i++) {
printf("%c", s[i]);
if (!mp[s[i]]) i += k-1;
}
printf("\n");
return 0;
}