您的位置:首页 > 其它

1112. Stucked Keyboard (20) hash

2016-04-08 20:23 471 查看
题目地址

#include<iostream>
#include<string>
#include<vector>

using namespace std;
const int maxn = 256;
bool hashTable[maxn] = {0};  //标记是否坏键
bool vis[maxn] = {0};       //标记是否输出坏键
struct Key{
char c;
int time;            //字符出现次数
}key;
int k;
string s;
vector<Key> origin;      //记录坏键
vector<int> cnt[maxn];   //记录所有坏键的所有出现次数
bool Check(int c){       //检查是否是坏键
for(int i = 0;i < cnt[c].size();i++){
if(cnt[c][i]%k) return 0;
}
return 1;
}
int main(){
cin >> k >> s;
for(int i = 0;i < s.size();){
char c = s[i];
int j = i;
while(j<s.size()&&s[j]==s[i]) j++;
key.c = c;
key.time = j-i;
cnt[c].push_back(j-i);
origin.push_back(key);
i = j;
}
for(int c = 0;c < maxn;c++){
if(cnt[c].size() && Check(c)) hashTable[c] = 1; //坏键
}
for(int i = 0;i < origin.size();i++){
char c = origin[i].c;
if(hashTable[c] && vis[c]==0){
cout << c;         //输出坏键
vis[c] = 1;
}
}
cout << endl;
for(int i = 0;i < origin.size();i++){
char c = origin[i].c;
int T = hashTable[c]?origin[i].time/k:origin[i].time;
for(int j = 0;j < T;j++){
cout << c;
}
}
cout << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: