Cod sursa(job #1559641)

Utilizator stoianmihailStoian Mihail stoianmihail Data 31 decembrie 2015 13:08:04
Problema Perle Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <stdio.h>

#define Nadejde 10010

int pos, flag, len;
int s[Nadejde];

void A(), B(), C();

/** Perla magica "A". **/
void A() {
  if (flag) {
    return;
  }
  pos++;
}

/** Perla magica "B". **/
void B() {
  if (flag) {
    return;
  }
  if (s[pos] == 2) {
    A();
    B();
  } else if ((s[pos] == 1) && (s[pos + 2] == 3)) {
    pos++;
    A();
    pos++;
    A();
    C();
  } else {
    flag = 1;
  }
}

/** Perla magica "C". **/
void C() {
  if (flag) {
    return;
  }
  if (s[pos] == 2) {
    A();
  } else if (s[pos] == 3) {
    A();
    B();
    C();
  } else if ((s[pos] == 1) && (s[pos + 1] == 2)) {
    A();
    A();
    A();
  } else {
    flag = 1;
  }
}

int main(void) {
  int i, N, answer;
  FILE *f = fopen("perle.in", "r");
  freopen("perle.out", "w", stdout);

  /* Citirea datelor si afisarea solutiei. */
  for (fscanf(f, "%d", &N); N; N--) {
    fscanf(f, "%d", &len);
    for (i = 0; i < len; i++) {
      fscanf(f, "%d", &s[i]);
    }
    /* Largim putin vectorul. */
    for (i = answer = 0; i < 7; i++) {
      s[i + len] = 0;
    }

    /* Pornim cu perla "A". */
    flag = pos = 0;
    A();
    answer |= (!flag) & (pos == len);

    /* Pornim cu perla "B". */
    flag = pos = 0;
    B();
    answer |= (!flag) & (pos == len);

    /* Pornim cu perla "C". */
    flag = pos = 0;
    C();
    answer |= (!flag) & (pos == len);

    fprintf(stdout, "%d\n", answer);

  }
  fclose(f);
  fclose(stdout);

  /// Multumim Doamne!
  puts("Doamne ajuta!");
  return 0;
}