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

杭电oj 1515题,该如何解决

2012-06-19 
杭电oj 1515题题目链接://http://acm.hdu.edu.cn/showproblem.php?pid1515C/C++ code#includestdio.h#i

杭电oj 1515题
题目链接://http://acm.hdu.edu.cn/showproblem.php?pid=1515

C/C++ code
#include<stdio.h>#include<string.h>char path[200];int k = 0;void sta(char *s,char *p,char *stackk,int i,int j,int t){   int m = 0;   char stack[100];      strcpy(stack,stackk);       if(s[i] == '\0' && t != 0 && p[j] != '\0' && stack[t-1]!=p[j])      return;       if(t == 0)   {         if(s[i] == '\0')      {          for(m = 0;m<k;m++)          {   printf("%c",path[m]);              if(m != k-1)               printf(" ");          }                    printf("\n");               return;        }      stackk[t++] = s[i++];        path[k++] = 'i';      sta(s,p,stackk,i,j,t);      k -- ;   }     else   {      if(s[i] != '\0')      {         path[k++] = 'i';         stackk[t++] = s[i++];         sta(s,p,stackk,i,j,t);          t--;         k--;         i--;      }      if(stack[t-1] == p[j])      {         path[k++] = 'o';         sta(s,p,stackk,i,j+1,t-1);         k--;      }        }}int main(){   char s[100],p[100],stack[100];      while(scanf("%s",s)!= EOF)   {      scanf("%s",p);      printf("[\n");      if(strlen(s) == strlen(p))        sta(s,p,stack,0,0,0);      printf("]");   }      return 0;} 

测试样例都正确,但是ac不了。
用的搜索做的。
各位大神帮忙看一下,是不是有哪个细节没有注意到。谢谢!

[解决办法]
以下可能改多了,但这样才能AC.

C/C++ code
#include<stdio.h>#include<string.h>char path[200];int k = 0;int len;//source word 的长度  addedint t;//addedvoid sta(char *s,char *p,char *stackk,int i,int j)//t不要参加递归  void sta(char *s,char *p,char *stackk,int i,int j,int t){   int m = 0;   //不需再设此变量 char stack[100];      //strcpy(stack,stackk);       //if(s[i] == '\0' && t != 0 && p[j] != '\0' && stack[t-1]!=p[j])   //    return;       if(j == len)//if(t == 0)   {         //if(s[i] == '\0')      //{          for(m = 0;m<len*2;m++)//for(m = 0;m<k;m++)          {   printf("%c ",path[m]);//题目要求each i and o is followed by a single space               //if(m != k-1)              // printf(" ");          }                    printf("\n");               return;        //}      // stackk[t++] = s[i++];        //path[k++] = 'i';      //sta(s,p,stackk,i,j,t);      //k -- ;   }   else   {      if(i<len)//if(s[i] != '\0')      {         path[k++] = 'i';         stackk[t++] = s[i++];         sta(s,p,stackk,i,j); //sta(s,p,stackk,i,j,t);         t--;         k--;         i--;      }      if(t&&stackk[t-1] == p[j])//if(stack[t-1] == p[j])      {         char c;//added         path[k++] = 'o';         c = stackk[--t];//added         sta(s,p,stackk,i,j+1);//sta(s,p,stackk,i,j+1,t-1);         k--;         stackk[t++] = c;//added      }        }}int main(){   char s[100],p[100],stack[100];      while(scanf("%s",s)!= EOF)   {      scanf("%s",p);      printf("[\n");      if((len=strlen(s)) == strlen(p))//if(strlen(s) == strlen(p))        sta(s,p,stack,0,0);//sta(s,p,stack,0,0,0);      printf("]\n"); //漏了\n  printf("]");   }      return 0;} 

热点排行