Pagini recente » Cod sursa (job #427077) | Cowfood | Cod sursa (job #2768568) | Cod sursa (job #1714253) | Cod sursa (job #632503)
Cod sursa(job #632503)
//Poasca Mihail
//groupa 234
#include<fstream>
#include<list>
#include<iterator>
#include<cstring>
using namespace std;
ifstream fin("tm.in");
ofstream fout("tm.out");
void solve(char s[])
{
list<char> l;
for(int i=0;i<strlen(s);i++)
l.push_back(s[i]);
list<char>::iterator it;
//verificam daca apartine limbajului a*b*c*
for(it=l.begin();it!=l.end() && (char)*it=='a';it++);
for(;it!=l.end() && (char)*it=='b';it++);
for(;it!=l.end() && (char)*it=='c';it++);
//daca nu ajungem la blanc dupa ce am trecut prin starile de mai sus
//=>nu apartine limbajului
if(it!=l.end())
{
fout<<"NU\n";
return;
}
//verificam a cu b
it=l.begin();
for(it=l.begin();it!=l.end() && (char)*it=='a' && existaB;)
{
*it='x';
cnt++;
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
if(it!=l.end())
{
//deci exista b => marcam
*it='y';
}
else
//schimbam starea
{
//demarcam b-urile
for(it=l.begin();it!=l.end();it++)
if((char)*it=='y')
*it='b';
//mutam capul pe b
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
for(;it!=l.end() && (char)*it=='b' && existaC;)
{
*it='y';
for(it=l.begin();it!=l.end() && (char)*it!='c';it++);
if(it!=l.end())
{
//deci exista c => marcam
*it='z';
}
else
{
//nu mai sunt c-uri respingem
fout<<"NU\n";
return;
}
//mutam capul inapoi pe b
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
}
//daca nu exista c acceptam
for(it=l.begin();it!=l.end() && (char)*it!='c';it++);
if(it==l.end())
{
fout<<"DA\n";
return;
}
else
{
fout<<"NU\n";
return;
}
}
//mutam capul inapoi pe a
for(it=l.begin();it!=l.end() && (char)*it!='a';it++);
}
//daca nu mai sunt a-uri..
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
//daca nu mai sunt b-uri
if(it==l.end())
{
fout<<"DA\n";
return;
}
//demarcam b-urile
for(it=l.begin();it!=l.end();it++)
if((char)*it=='y')
*it='b';
//mutam capul pe b
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
for(;it!=l.end() && (char)*it=='b' && existaC;)
{
*it='y';
for(it=l.begin();it!=l.end() && (char)*it!='c';it++);
if(it!=l.end())
{
//deci exista c => marcam
*it='z';
}
else
{
//nu mai sunt c-uri respingem
fout<<"NU\n";
return;
}
//mutam capul inapoi pe b
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
}
//daca nu exista c acceptam
for(it=l.begin();it!=l.end() && (char)*it!='c';it++);
if(it==l.end())
{
fout<<"DA\n";
return;
}
else
{
fout<<"NU\n";
return;
}
}
int main()
{
int T;
fin>>T;
while(T--)
{
char s[10000];
fin>>s;
solve(s);
}
return 0;
}