Cod sursa(job #3004482)

Utilizator albertaizicAizic Albert albertaizic Data 16 martie 2023 12:52:17
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
#include <stdio.h>
using namespace std;
#define NMAX 10000

int poz[2];
int ok[2];
int v[2][NMAX+1];
int main(){
  FILE *fin,*fout;
  int t,l,i,a;
  fin=fopen("perle.in","r");
  fout=fopen("perle.out","w");
  fscanf(fin,"%d",&t);
  while(t--){
    fscanf(fin,"%d",&l);
    if(l==1){
      fscanf(fin,"%d",&a);
      fprintf(fout,"1\n");
    }else{
      poz[1]=poz[0]=ok[1]=ok[0]=1;
      v[0][0]=5;
      v[1][0]=6;
      while(l--){
        fscanf(fin,"%d",&a);
        for(i=0;i<2;i++){
          if(ok[i]){
            if(v[i][poz[i]-1]<4){
              poz[i]--;
              ok[i]=(v[i][poz[i]]==a);
            }else if(v[i][poz[i]-1]==4){
              poz[i]--;
            }else if(v[i][poz[i]-1]==5){
              if(a==3)
                ok[i]=0;
              if(a==1){
                poz[i]--;
                v[i][poz[i]++]=6;
                v[i][poz[i]++]=4;
                v[i][poz[i]++]=3;
                v[i][poz[i]++]=4;
              }
            }else{
              if(a==2)
                poz[i]--;
              if(a==1){
                poz[i]--;
                v[i][poz[i]++]=4;
                v[i][poz[i]++]=2;
              }
              if(a==3){
                poz[i]--;
                v[i][poz[i]++]=6;
                v[i][poz[i]++]=5;
              }
            }
          }
          if(poz[i]==0 && l!=0)
            ok[i]=0;
        }
      }
      fprintf(fout,"%d\n",((!poz[0] && ok[0]) || (!poz[1] && ok[1])));
    }
  }
  return 0;
}