65,187
社区成员




#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<string.h>
int len = 0;
void f(char *s,char c,int l,int h)
{
if( c == 'U')
{
if( l==-1)
{
printf("No.\n");return;
}
if( s[l] == 'b')//bU --U
{
f(s,'U',l-1,h);return;
}
else if( (s[l] == '(' && s[h] == ')' ) ||( s[l] == 'a' && s[h] == 'b' ) )//(U) 或aUb
{
f(s,'Z',l-1,h+1);return;
}
printf("No.\n");
}
else if( c == 'Z')
{
if( l == -1 && h == len)
{
printf("Yes.\n");return;
}
else
{
if( l == -1)
{
printf("No.\n");return;
}
else
{
if(s[l] == 'd') //dZ
{
f(s,'U',l-1,h);
}
else
{
printf("No.\n");return;
}
}
}
}
}
int main()
{
int yy,i ;
scanf("%d",&yy);
char s[100000];
for(;yy>0;yy--)
{
scanf("%s",s);
len = strlen(s);
int flag = 0 ;
for(i=0;i<len;i++)
{
if(s[i] == 'e' || s[i] == 'U')
{
f(s,'U',i-1,i+1);
flag = 1;
break;
}
else if(s[i] == 'Z')
{
f(s,'Z',i-1,i+1);
flag = 1;
break;
}
}
if( flag == 0)
printf("No.\n");
}
return 0;
}
/*
1 87175 liao14 44 KB 2 MS g++ 924B 2009-06-12 15:23
一个文法G[Z]有如下五条规则:
(1)Z→(U)
(2)Z→aUb
(3)U→dZ
(4)U→bU
(5)U→e
由此文法可以产生语言:比如:ad(be)b就是此文法的语言,因为有如下推导序列:
Z→aUb→adZb→ad(U)b→ad(bU)b→ad(be)b
*/
#include <iostream>
using namespace std;
char s[10000];
bool ok;
void solve(char ch,char *p,char *q)
{
if(q<p) return;
if(ch=='Z')
{
if((*p)=='(' && (*q)==')') solve('U',p+1,q-1);
else if((*p)=='a' && (*q)=='b') solve('U',p+1,q-1);
else return;
}
else
{
if((*p)=='d') solve('Z',p+1,q);
else if((*p)=='b') solve('U',p+1,q);
else if(p==q && (*p)=='e')
{
ok=1;
return;
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
int c;
scanf("%d\n",&c);
while(c--)
{
gets(s);
ok=0;
solve('Z',s,strlen(s)+s-1);
if(ok) puts("Yes.");
else puts("No.");
}
return 0;
}
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<string.h>
int len = 0;
void f(char *s, char c, int l, int h)
{
if (c == 'U')
{
if (l == -1)
{
printf("No.\n");return;
}
if (s[l] == 'b')//bU --U
{
f(s, 'U', l - 1, h);return;
}
else if ((s[l] == '(' && s[h] == ')') || (s[l] == 'a' && s[h] == 'b')) //(U) 或aUb
{
f(s, 'Z', l - 1, h + 1);return;
}
printf("No.\n");
}
else if (c == 'Z')
{
if (l == -1 && h == len)
{
printf("Yes.\n");return;
}
else
{
if (l == -1)
{
printf("No.\n");return;
}
else
{
if (s[l] == 'd') //dZ
{
f(s, 'U', l - 1, h);
}
else
{
printf("No.\n");return;
}
}
}
}
}
int main()
{
int yy, i ;
scanf("%d", &yy);
char s[100000];
for (;yy > 0;yy--)
{
scanf("%s", s);
len = strlen(s);
int flag = 0 ;
for (i = 0;i < len;i++)
{
if (s[i] == 'e' || s[i] == 'U')
{
f(s, 'U', i - 1, i + 1);
flag = 1;
break;
}
else if (s[i] == 'Z')
{
f(s, 'Z', i - 1, i + 1);
flag = 1;
break;
}
}
if (flag == 0)
printf("No.\n");
}
return 0;
}