Cod sursa(job #632503)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 11 noiembrie 2011 13:36:23
Problema Tm Scor 0
Compilator cpp Status done
Runda arhiva-teme-fmi Marime 4.44 kb
//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;
}