首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

ZOJ1011哪位高手来帮小弟我解答下

2012-03-25 
ZOJ1011谁来帮我解答下这是我的代码,测试数据正确,但是网上提交时失败了,高手来帮我看看,万分感谢。#includ

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;
}

热点排行