Pagini recente » Cod sursa (job #1713684) | Cod sursa (job #1345894) | Cod sursa (job #1744481) | Cod sursa (job #1066854) | Cod sursa (job #632420)
Cod sursa(job #632420)
#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();
int existaB=1;
int cnt=0;
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';
existaB=1;
}
else
//schimbam starea
existaB=0;
//mutam capul inapoi pe a
for(it=l.begin();it!=l.end() && (char)*it!='a';it++);
}
//verificam din ce cauza/in ce am schimbat starea
if(it==l.end())
{
if(existaB==1)
{
//daca am iesit ca am terminat a-urile
//verificam daca mai sunt b-uri
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
if(it==l.end())
{
fout<<"DA\n";
return;
}
}
}
//verificam b cu c
int existaC=1;
//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';
existaC=1;
}
else
//schimbam starea
existaC=0;
//mutam capul inapoi pe b
for(it=l.begin();it!=l.end() && (char)*it!='b';it++);
}
//verificam din ce cauza/in ce am schimbat starea
if(it==l.end())
{
if(existaC==1)
{
//daca am iesit ca am terminat b-urile si am avut si c
//verificam daca mai sunt c-uri
for(it=l.begin();it!=l.end() && (char)*it!='c';it++);
if(it==l.end())
{
fout<<"DA\n";
return;
}
else
fout<<"NU\n";
}
else
fout<<"NU\n";
}
else
fout<<"NU\n";
}
int main()
{
int T;
fin>>T;
while(T--)
{
char s[10000];
fin>>s;
solve(s);
}
return 0;
}