Cod sursa(job #672420)

Utilizator CrescentselectJicol Crescent Crescentselect Data 2 februarie 2012 09:10:53
Problema Perle Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.45 kb
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

//sir curent "BC"
string f(string sir_curent, string rezultat)
{
	int i;
	int k=0;
	for(i=0;i<sir_curent.length();i++) {
		if(sir_curent[i] == 'A') {
			sir_curent[i] = rezultat[k];
			k++;
		}
		else if(sir_curent[i] == 'B') {
			if(rezultat[k] == '2') {
				sir_curent[i] = rezultat[k];
				k++;
				string tmp = f("B",rezultat.substr(k));
				k += tmp.length();
				sir_curent = sir_curent.substr(0,i+1)+tmp+sir_curent.substr(i+1);
			} else if(rezultat[k] == '1' && k < rezultat.length()-3 && rezultat[k+2] == '3') {
				sir_curent[i] = rezultat[k];
				if(sir_curent.length() > i+3) {
					sir_curent[i+1] = rezultat[k+1];
					sir_curent[i+2] = rezultat[k+2];
					sir_curent[i+3] = rezultat[k+3];
				} else {
					sir_curent = sir_curent + rezultat[k+1] + rezultat[k+2] + rezultat[k+3];
				}
				k+=4;
				i+=3;
				string tmp = f("C",rezultat.substr(k));
				k += tmp.length();
				sir_curent = sir_curent.substr(0,i+1)+tmp+sir_curent.substr(i+1);
			}
		}
		else if(sir_curent[i] == 'C') {
			if(rezultat[k] == '2') {
				sir_curent[i] = rezultat[k];
				k++;
			} else if(rezultat[k] == '1' && k < rezultat.length()-2 && rezultat[k+1] == '2') {
				sir_curent[i] = rezultat[k];
				if(sir_curent.length() > i+1) {
					sir_curent[i+1] = rezultat[k+1];
				} else {
					sir_curent = sir_curent + rezultat[k+1];
				}
				i++;
				if(sir_curent.length() > i+1) {
					sir_curent[i+1] = rezultat[k+2];
				} else {
					sir_curent = sir_curent + rezultat[k+2];
				}
				k+=3;
				i++;
			} else if(rezultat[k] == '3') {
				sir_curent[i] = rezultat[k];
				k++;
				string tmp = f("B",rezultat.substr(k));
				k += tmp.length();
				string tmp2 = f("C",rezultat.substr(k));
				k += tmp2.length();
				sir_curent = sir_curent.substr(0,i+1)+tmp+tmp2+sir_curent.substr(i+1);
			}
		}
	}
	return sir_curent;
}

bool perle(string rezultat)
{
	string fA = f("A",rezultat);
	if(fA == rezultat)
		return true;
	string fB = f("B",rezultat);
	if(fB == rezultat)
		return true;
	string fC = f("C",rezultat);
	if(fC == rezultat)
		return true;
	return false;
}

int main()
{
	string tmp;
	ifstream f("perle.in");
	ofstream g("perle.out");
	int n,i,nrc,j;
	f>>n;
	
	for(i=0;i<n;i++)
	{
		f>>nrc;
		string s;
		for(j=0;j<nrc;j++)
		{
			f>>tmp;
			s += tmp;
		}
		g << perle(s) << endl;
	}
	f.close();
	g.close();
	return 0;
}