考查点:集合set,哈希,两指针
思路及提交情况:不知道自己的算法为什么只有18分,看了别人的是用集合,两指针遍历相同元素
#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define FOR(i, x, y) for(int i = x; i <= y; i++)
#define rFOR(i, x, y) for(int i = x; i >= y; i--)
#define MAXN 600
#define oo 0x3f3f3f3f
using namespace std;
int h[2000];
int flag[2000];
int cnt;
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
int k;
char str[10100];
char ans[10100];
scanf("%d",&k);
getchar();
gets(str);
string s=(string)str;
int len=strlen(str);
set<char> st;
int j=1;
FOR(i,0,len-1)
{
int cnt=1;j=i+1;
while(str[i]==str[j]&&j<len&&cnt<k){
cnt++;j++;
}
if(cnt==k&&flag[str[i]]==0){
st.insert(str[i]);
}else if(cnt!=k){
if(st.find(str[i])!=st.end())st.erase(str[i]);
flag[str[i]]=1;
}
i=j;i--;
}
set<char> sa;
sa=st;
FOR(i,0,len-1)
{
if(st.find(str[i])!=st.end()){
cout<<str[i];
st.erase(str[i]);
}
if(st.empty())break;
}
cout<<endl;
FOR(i,0,len-1)
{
if(sa.find(str[i])!=sa.end()){
cout<<str[i];
i+=k;i--;
}else cout<<str[i];
}
return 0;
}