Cod sursa(job #2438458)

Utilizator lucametehauDart Monkey lucametehau Data 12 iulie 2019 15:57:01
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#include <string>

using namespace std;

ifstream cin ("perle.in");
ofstream cout ("perle.out");

int n, m;

int v[10005];

string s;

int main() {
  cin >> m;
  for(; m; m--) {
    cin >> n;
    for(int i = 1; i <= n; i++)
      cin >> v[i];
    if(n == 1) {
      cout << "1\n";
      continue;
    }
    bool ok = 1;
    s.clear();
    s += '$', s += '#';
    int i = 1;
    while(i <= n) {
      while(s[i] - '0' == v[i] && i <= n)
        i++;
      if(i > n)
        break;
      if('0' <= s[i] && s[i] <= '9') {
        ok = 0;
        break;
      }
      if(s[i] == 'A') {
        i++;
        continue;
      }
      if(v[i] == 1) {
        if(((i == 1 && n == 3) || s[i] == 'C') && v[i + 1] == 2) {
          s.erase(s.begin() + i);
          s.insert(i, "12A");
        } else if((i == 1 || s[i] == 'B') && v[i + 2] == 3) {
          s.erase(s.begin() + i);
          s.insert(i, "1A3AC");
        } else {
          ok = 0;
          break;
        }
      } else if(v[i] == 2) {
        if(s[i] == 'C')
          s.erase(s.begin() + i), s.insert(i, "2");
        else if(i == 1 || s[i] == 'B')
          s.erase(s.begin() + i), s.insert(i, "2B");
      } else if(v[i] == 3 && (i == 1 || s[i] == 'C')) {
        s.erase(s.begin() + i);
        s.insert(i, "3BC");
      } else {
        ok = 0;
        break;
      }
      i++;
    }
    if(s.size() != n + 1)
        ok = 0;
    cout << ok << "\n";
  }
  return 0;
}