Java
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
String s = sc.next();
sc.close();
HashSet<Character> set = new HashSet<>();
boolean[] flag = new boolean[256];
boolean[] isOut = new boolean[256];
StringBuilder res = new StringBuilder();
for (int i = 0; i < s.length(); ++i) {
int j = i, cnt = 0;
while (j < s.length() && s.charAt(j) == s.charAt(i)) {
j++;
cnt++;
}
if (!flag[s.charAt(i)] && cnt % k == 0) {
set.add(s.charAt(i));
} else {
flag[s.charAt(i)] = true;
set.remove(s.charAt(i));
}
i = j - 1;
}
for (int i = 0; i < s.length(); ++i) {
if (!set.contains(s.charAt(i))) {
res.append(s.charAt(i));
} else {
res.append(s.charAt(i));
if (!isOut[s.charAt(i)]) {
isOut[s.charAt(i)] = true;
System.out.print(s.charAt(i));
}
int j = i + 1, cnt = 0;
while (j < s.length() && s.charAt(j) == s.charAt(i) && cnt < k) {
j++;
cnt++;
}
i = j - 1;
}
}
System.out.println();
System.out.println(res);
}
}
C++
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>
using namespace std;
int k;
string s, res;
unordered_set<char> st;
bool flag[256], is_out[256];
int main() {
cin >> k >> s;
for (int i = 0; i < s.size(); ++i) {
int j = i, cnt = 0;
while (j < s.size() && s[j] == s[i]) j++, cnt++;
if (!flag[s[i]] && cnt % k == 0) st.insert(s[i]);
else {
flag[s[i]] = true;
if (st.count(s[i])) st.erase(s[i]);
}
i = j - 1;
}
for (int i = 0; i < s.size(); ++i) {
if (!st.count(s[i])) res += s[i];
else {
res += s[i];
if (!is_out[s[i]]) {
is_out[s[i]] = true;
cout << s[i];
}
int j = i + 1, cnt = 0;
while (j < s.size() && s[j] == s[i] && cnt < k) j++, cnt++;
i = j - 1;
}
}
cout << endl;
cout << res << endl;
return 0;
}