ZOJ1011哪位高手来帮小弟我解答下
ZOJ1011谁来帮我解答下
这是我的代码,测试数据正确,但是网上提交时失败了,高手来帮我看看,万分感谢。
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct NODE
{
int num;
int left[11],right[11];
}S;
int n,m;
S signal[16][11];
char tree[5000];
int solve(int i,int j)
{
int k,flag;
if(tree[j]=='*')
if(i>=n-m) return 1;
else return 0;
else
{
flag=0;
for(k=1;k<=signal[i][tree[j]-'a'+1].num;k++)
{
if(solve(signal[i][tree[j]-'a'+1].left[k],j*2)&&solve(signal[i][tree[j]-'a'+1].right[k],j*2+1))
flag=1;
}
return flag;
}
}
int main()
{
int k,l,i,j,num,judge;
char ch;
scanf("%d%d%d",&n,&m,&k);
num=0;
while(m&&n&&k)
{
if(num) printf("\n");
printf("NTA%d:\n",++num);
for(i=0;i<n;i++)
for(j=1;j<=k;j++)
{
signal[i][j].num=0;
while(1)
{
signal[i][j].num++;
scanf("%d%d",&signal[i][j].left[num],&signal[i][j].right[num]);
ch=getchar();
if(ch=='\n') break;
}
}
scanf("%d",&l);
while(l!=-1)
{
getchar();
memset(tree,'*',sizeof(tree));
for(j=1;j<=pow(2,l+1)-1;j++)
{
scanf("%c",&tree[j]);
getchar();
}
judge=solve(0,1);
if(judge) printf("Valid\n");
else printf("Invalid\n");
scanf("%d",&l);
}
scanf("%d%d%d",&n,&m,&k);
}
return 0;
}
------解决方案--------------------
这是我的代码,测试数据正确,但是网上提交时失败了,高手来帮我看看,万分感谢。
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct NODE
{
int num;
int left[11],right[11];
}S;
int n,m;
S signal[16][11];
char tree[5000];
int solve(int i,int j)
{
int k,flag;
if(tree[j]=='*')
if(i>=n-m) return 1;
else return 0;
else
{
flag=0;
for(k=1;k<=signal[i][tree[j]-'a'+1].num;k++)
{
if(solve(signal[i][tree[j]-'a'+1].left[k],j*2)&&solve(signal[i][tree[j]-'a'+1].right[k],j*2+1))
flag=1;
}
return flag;
}
}
int main()
{
int k,l,i,j,num,judge;
char ch;
scanf("%d%d%d",&n,&m,&k);
num=0;
while(m&&n&&k)
{
if(num) printf("\n");
printf("NTA%d:\n",++num);
for(i=0;i<n;i++)
for(j=1;j<=k;j++)
{
signal[i][j].num=0;
while(1)
{
signal[i][j].num++;
scanf("%d%d",&signal[i][j].left[num],&signal[i][j].right[num]);
ch=getchar();
if(ch=='\n') break;
}
}
scanf("%d",&l);
while(l!=-1)
{
getchar();
memset(tree,'*',sizeof(tree));
for(j=1;j<=pow(2,l+1)-1;j++)
{
scanf("%c",&tree[j]);
getchar();
}
judge=solve(0,1);
if(judge) printf("Valid\n");
else printf("Invalid\n");
scanf("%d",&l);
}
scanf("%d%d%d",&n,&m,&k);
}
return 0;
}
------解决方案--------------------