Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- using namespace std;
- int main() {
- int n, potezi = 0;
- cin >> n;
- map<int, bool> poz; //pozicii na parovi patiki so isti strani (LL ili DD)
- for (int i = 0; i < n; ++i) {
- char p1, p2;
- cin >> p1 >> p2;
- bool a1 = p1 != 'L', a2 = p2 == 'D';
- if (a1 == a2) {
- poz[i] = a1;
- //cout << "poz[" << i << "] = " << a1 << endl;
- }
- }
- while (!poz.empty()) {
- map<int, bool>::iterator it = poz.begin();
- int i = (*it).first;
- bool a = (*it).second;
- //cout << "i=" << i << " a=poz[" << i << "].second=" << a << endl;
- map<int, bool>::iterator jt = it;
- bool reachedEnd = next(jt) == poz.end();
- while (1) {
- if (reachedEnd) {
- if (prev(jt) == jt) { //jt e na pocetokot, ova e 'failsafe' :^)
- break;
- } else if ((*jt).first >= i) { //j >= i
- jt = prev(it); //j = i - 1
- } else { //j < i
- --jt;
- }
- } else {
- ++jt;
- reachedEnd = next(jt) == poz.end();
- }
- int j = (*jt).first;
- bool b = (*jt).second;
- //cout << "\tj=" << j << " b=" << b << endl;
- if (b == !a) {
- potezi += (j - i > 0) ? j - i : i - j; //zemi aboslutna vrednost
- //cout << "\t\tbrisam kutii so i=" << i << ", a=" << a << ", j=" << j << ", b=" << b << endl;
- poz.erase(it);
- poz.erase(jt);
- break;
- }
- }
- }
- cout << potezi;
- }
Advertisement
Add Comment
Please, Sign In to add comment