Cod sursa(job #153107)

Utilizator Mishu91Andrei Misarca Mishu91 Data 10 martie 2008 09:48:06
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<cstdio>
#define Nmax 10005

FILE *fin=freopen("perle.in","rt",stdin),
     *fout=freopen("perle.out","wt",stdout);
     
int n,a[Nmax],l;
 
int fcb(int k); 
     
int fcc (int k)
{
  if(k > l)  
    return 1;
    
  else if (a[k] == 3)
    return 1 & fcb(k+1) & fcc(k+2);
  
  else if (a[k] == 1)
    return 1 & fcc(k+1);
    
  else if(a[k] == 2 && a[k-1] == 1)
    return 1 & fcc(k+1);
   
   else if(a[k-1] == 2 && a[k-2] == 1)
     return 1;
     
   else 
     return 0;  
}
     
int fcb (int k)
{
  if(k > l)
    return 1;
  
  if(a[k] == 2)
    return 1 & fcb(k+1);
  
  else if(a[k] == 1)
    return 1 & fcb(k+2);
  
  else if (a[k] == 3 && a[k-2] == 1)
    return 1 & fcb(k+2);
  
  else if(a[k-4] == 3 && a[k-4] == 1)
    return 1 & fcc(k+1);
  
  else 
    return 0; 
}
    
     
void solve()
{
  scanf("%d",&l);
  for(int i=0; i<l; i++)
  {
    scanf("%d",a + i);
  }
    if(l == 1)  
    {
      printf("1\n");
      return ;
    }
  
    if(l == 2)
    {
      printf("0\n");
      return ;
    }
  
    if(l == 3)
      if(a[0] == 1)
        if(a[1] == 2)
        {
          printf("1\n");
          return ;
        }
        else
        {
          printf("0\n");
          return ;
        }
      else
      { 
        printf("0\n");
        return ;
      }
  
  if(l >= 4)
  {
    if(a[0] == 1 || a[0] == 2)
      printf("%d\n",fcb(0));
    if(a[0] == 3)
      printf("%d\n",fcc(0));
  }   
 
} 

int main()
{
  scanf("%d",&n);
  for(int i=0;i<n;i++)
    solve();
  return 0;
}