Skip to content

Instantly share code, notes, and snippets.

@tabvn
Last active October 12, 2018 16:24
Show Gist options
  • Select an option

  • Save tabvn/5bb43f0be23ac3ebbbdd4d5db7a650d7 to your computer and use it in GitHub Desktop.

Select an option

Save tabvn/5bb43f0be23ac3ebbbdd4d5db7a650d7 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <vector>
using namespace std;
struct Num{
int value;
bool deleted;
};
vector<Num*> v;
void AddNum(int value, int index){
Num *n = new Num();
n->deleted = false;
n->value= value;
v.push_back(n);
}
int findFirstIndex(int min){
int index = -1;
int increase = 0;
for (int i = 0; i < v.size(); i++) {
if(v[i] != 0x0 && increase >= min){
index = i;
break;
}
if(v[i] != 0x0){
increase ++;
}
}
return index;
}
int main(){
int m,k;
string s;
cin >> m >> k;
getline(cin, s, '.');
/* s = "ABBABA";
m = 6;
k = 3;
*/
for (int i = 0; i < m; i ++) {
AddNum(i, i);
}
int index = 0;
for (int i = 0; i < s.size(); i++) {
if(s[i] == 65){
// move from 0 -> last
index = findFirstIndex(0);
AddNum(v[index]->value, int(s.size()));
delete v[index];
v[index] = NULL;
}
if(s[i] == 66){
index = findFirstIndex(1);
AddNum(v[index]->value, int(s.size()));
delete v[index];
v[index] = NULL;
}
}
// tim K
int vitri = 0;
for (int i = k-1; i <= k+1; i++){
vitri = findFirstIndex(i);
if(i != k -1){
cout << " ";
}
cout << v[vitri]->value;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment