Pagini recente » Cod sursa (job #2140235) | Cod sursa (job #2454931) | Cod sursa (job #971190) | Cod sursa (job #1145986) | Cod sursa (job #383878)
Cod sursa(job #383878)
#include <fstream>
#include <iostream>
#include <list>
using namespace std;
ifstream in("perle.in");
ofstream out("perle.out");
list<char> s;
list<char>::iterator it,it2;
int n,i,l,x[10001],sol,pos,q;
int main()
{
in>>l;
while(l--)
{
in>>n;
for(i=1; i<=n; i++)
in>>x[i];
s.clear();
if(n == 1)
{out<<"1\n";continue;}
else if(n==2)
{out<<"0\n";continue;}
else if(n==3 && x[1] == 1 && x[2] == 2)
{out<<"1\n";continue;}
else if(n==3)
{out<<"0\n";continue;}
if(x[1] == 1 || x[1] == 2)
s.push_back('b');
else if(x[1] == 3)
s.push_back('c');
pos = 1;sol=1;it=s.begin();
if(pos>n)
{sol=0;break;}
if(pos==n && (s.back() == 'a' || (s.back() == 'c' && x[n]==2)))
{sol=1;break;}
while(1)
{
if(pos==n)
break;
//cout<<(*it2<4)?*it2+'0':*it2;
cout<<'\n';
if(*it == 'a')
*it = x[pos];
else if(*it == 'b' && x[pos] == 2)
{
*it = 2;
it++;pos++;
s.insert(it, 'b');
it--;//it--;
}
else if(*it == 'b' && x[pos]== 1)
{
*it=1;
it++;
s.insert(it,'a');
s.insert(it,3);
s.insert(it,'a');
s.insert(it,'c');
it--;pos+=4;
}
else if(*it == 'b' && x[pos]==3)
{sol=0;break;}
else if(*it == 'c' && x[pos]==1)
{
if(pos==n-2 && x[pos]==1 && x[pos+1]==2)
{sol=1;break;}
else
{sol=0;break;}
}
else if(*it == 'c' && x[pos]== 2)
{
*it=2;
pos++;
it++;
}
else if(*it == 'c' && x[pos] == 3)
{
*it=3;
it++;pos++;
s.insert(it, 'b');
s.insert(it, 'c');
it--;it--;
}
for(it2 = s.begin(); it2!=s.end(); it2++)
if(*it2<6)
cout<<(int)*it2;
else
cout<<*it2;
}
if(sol==0)
{out<<"0\n";break;}
else
{
q = 1;
for(it = s.begin(); it!=s.end(); it++)
{
if(q==n-1)
break;
if(*it == 1 && x[q] != 1)
{sol=0;break;}
if(*it == 2 && x[q] != 2)
{sol=0;break;}
q++;
}
if(s.back() == 'c' && x[n]!=2)
sol=0;
if(s.back() == 'c' && n-pos==2 && x[pos]==1 && x[pos+1]==2)
sol=1;
if(*it < 7)
cout<<"#### "<<*it+'0'<<" ####";
else
cout<<"#### "<<(char)*it<<" ####";
out<<sol<<'\n';
}
}
return 0;
}