提交时间:2022-05-06 22:47:31

运行 ID: 49414

#include <iostream> #include <vector> using namespace std; int main() { // initialize int N(0), T(0); cin >> N >> T; vector<vector<int> > track(N + (T << 1) + T); for (int i(0); i != N; ++i) { register char c(0); cin >> c; if (c == 'R') track[i].push_back(1); if (c == 'G') track[i].push_back(-1); } // loop while (T--) { // run for (vector<vector<int> >::reverse_iterator i(track.rbegin() + 1); i != track.rend(); ++i) { if (i->empty()) continue; if ((*i)[0] < 0) (i - 1)->push_back((*i)[0]); if ((*i)[0] > 0) (i - 3)->push_back((*i)[0]); i->clear(); } // kick for (vector<vector<int> >::reverse_iterator i(track.rbegin()); i != track.rend(); ++i) { if (i->empty()) continue; int R_cnt(0), G_cnt(0); for (vector<int>::const_iterator j(i->begin()); j != i->end(); ++j) { if (*j > 0) R_cnt += *j; if (*j < 0) G_cnt += *j; } if (!G_cnt) { i->clear(); i->push_back(R_cnt); } else if (!R_cnt) { i->clear(); i->push_back(G_cnt); } else { (i + 1)->push_back(R_cnt); i->clear(); i->push_back(G_cnt); } } // output for (vector<vector<int> >::const_iterator i(track.begin()); i != track.end(); ++i) { if (i->size() != 1) continue; if ((*i)[0] > 0) { cout << 'R'; if ((*i)[0] > 1) { cout << '(' << (*i)[0] << ')'; } } if ((*i)[0] < 0) { cout << 'G'; if ((*i)[0] < -1) { cout << '(' << -(*i)[0] << ')'; } } } cout << endl; } return 0; }