Pagini recente » Cod sursa (job #3295199) | Cod sursa (job #263270) | Cod sursa (job #3168655) | Cod sursa (job #2142961) | Cod sursa (job #630602)
Cod sursa(job #630602)
Utilizator |
Ionut Bogdanescu swift90 |
Data |
5 noiembrie 2011 23:28:25 |
Problema |
Tm |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
1.9 kb |
#include<cstdio>
using namespace std;
char S[1010];
struct Nod{
char x;
bool mar;
Nod *urm,*prev;
Nod(){
x=0;
urm=prev=NULL;
mar=false;
}
}*L;
Nod* add(char c,Nod *cc){
Nod *ax=new Nod;
ax->x=c;
if(!cc)
return ax;
ax->prev=cc;
cc->urm=ax;
return ax;
}
void curat(Nod *x){
Nod *ax;
while(x){
ax=x;
x=x->urm;
delete ax;
}
}
void solve(){
int i,ok;
curat(L);
L=add('B',0);
Nod *ult=L;
for(i=0;'a'==S[i];++i)
ult=add(S[i],ult);
for(;'b'==S[i];++i)
ult=add(S[i],ult);
if(S[i]=='a'){
printf("NU\n");
return;
}
for(;'c'==S[i];++i)
ult=add(S[i],ult);
if(S[i]=='a' || S[i]=='c'){
printf("NU\n");
return;
}
ult=add('B',ult);
for(ok=1;ok;){
ult=L->urm;
while(ult->mar==true && ult->x=='a')
ult=ult->urm;
if(ult->x!='a')
ok=0;
else
ult->mar=true;
while(ult->x=='a' || (ult->x=='b' && ult->mar==true))
ult=ult->urm;
if(!ok){
if(ult->x!='b'){
printf("DA\n");
return;
}
else{
for(;ult->x=='b';ult=ult->prev)
ult->mar=false;
}
}
else{
if(ult->x=='b')
ult->mar=true;
else{
for(ult=ult->prev;ult->x=='b';ult=ult->prev)
ult->mar=false;
ok=0;
}
}
}
for(ok=1;ok;){
ult=L->urm;
for(;ult->x=='a' || (ult->x=='b' && ult->mar==true);ult=ult->urm);
if(ult->x!='b')
ok=0;
else
ult->mar=true;
while(ult->x=='b' || (ult->x=='c' && ult->mar==true))
ult=ult->urm;
if(!ok){
if(ult->x!='c'){
printf("DA\n");
return;
}
else{
printf("NU\n");
return;
}
}
else{
if(ult->x=='c')
ult->mar=true;
else
ok=0;
}
}
printf("NU\n");
}
int main(){
freopen("tm.in","r",stdin);
freopen("tm.out","w",stdout);
int t;
scanf("%d",&t);
fgets(S,10,stdin);
for(;t;--t){
fgets(S,1010,stdin);
solve();
}
fclose(stdin);
fclose(stdout);
return 0;
}