Pagini recente » Cod sursa (job #2005619) | Monitorul de evaluare | Cod sursa (job #594564) | Cod sursa (job #1001469) | Cod sursa (job #1124706)
#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;
}