Cod sursa(job #1124701)

Utilizator paul.chPaul Chelarescu paul.ch Data 26 februarie 2014 13:21:09
Problema Perle Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.32 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");
//#include <windows.h>
//#include<stdio.h>
//#include<time.h>
int arr[10000], art[10000];
bool raspuns =  false;
// -1 - A, 4-B, 5-C
int work(int p, char rule) // int pt ca returnez cate pozitii in fata am putut merge cu recursivitatea
//                          p este defapt pozitia
{
    // clauza de final de vector, adica raspuns = true
    if(arr [p + 1] == -2)
    {
        raspuns = true;
    }
    if(rule == 'b' and !raspuns)
    {
        if(arr[p] == 2)
        {
            int pozitie;
            pozitie = work(p + 1, 'b');
            if(arr[pozitie] == -2) raspuns = true;
            return pozitie;
        }
        if(arr[p] == 1)
        {
            int pozitie;
            if(arr[p + 2] != 3)raspuns = false;
            pozitie = work(p + 4, 'c');
            if(arr[pozitie] == -2) raspuns = true;
            return pozitie;
        }
    }
    if(rule == 'c' and !raspuns)
    {
        if(arr[p] == 3)
        {
            int pozitie, pozitie2;
            pozitie = work(p+1, 'b');
                        if(arr[pozitie] == -2) raspuns = true;
            pozitie2 = work(pozitie, 'c');
                        if(arr[pozitie2] == -2) raspuns = true;
            return pozitie2;
        }
        if(arr[p] == 1 and arr[p + 1] == 2)
        {
//            art[p + 3] = -1;
            return p + 3;
        }
        if(arr[p] == 2)
        {
            return p + 1;
        }
    }
//    return p + 1;
}

int main()
{
//    srand(time(NULL));
//    for ( int as = 0; as < 20; ++as)
//    {
//        int a = rand() % 20;
//        for(int i = 0; i < a; ++i)cout << rand() % 3 + 1 ;
//        cout << endl;
//    }
    int cate_teste;
    fin >>cate_teste;
    int cate_pe_rand;
//    memset(arr, '-2', 10000);
    for(int dispearsable = 0; dispearsable < 10000; ++ dispearsable) arr[dispearsable] = -2;
    for( int var = 0; var < cate_teste; ++ var)
    {
        fin >> cate_pe_rand;
        for(int inutil = 0; inutil < cate_pe_rand; ++ inutil)
        {
            fin >> arr[inutil];
        }
        work(0, 'b');
        work(0, 'c');
        fout << raspuns << '\n' ;
        raspuns = false;
    }

    return 0;
}