杭电oj 1515题

violet_xrym 2012-06-08 12:09:36
题目链接://http://acm.hdu.edu.cn/showproblem.php?pid=1515

#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不了。
用的搜索做的。
各位大神帮忙看一下,是不是有哪个细节没有注意到。谢谢!
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2012-06-10
  • 打赏
  • 举报
回复
以下可能改多了,但这样才能AC.

#include<stdio.h>
#include<string.h>

char path[200];
int k = 0;
int len;//source word 的长度 added
int t;//added

void 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;
}
cryingbee 2012-06-08
  • 打赏
  • 举报
回复
有没有说长度限制?会出现多于100个字符的情况吗?
hen_hao_ji 2012-06-08
  • 打赏
  • 举报
回复
自己想几组数据,样例太少了,可能有什么问题没想到,看一下别人的解题报告:
http://www.baidu.com/s?ie=utf-8&bs=hdu+acm&f=8&rsv_bp=1&wd=zoj+1004&inputT=3594
violet_xrym 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

自己想几组数据,样例太少了,可能有什么问题没想到,看一下别人的解题报告:
http://www.baidu.com/s?ie=utf-8&bs=hdu+acm&f=8&rsv_bp=1&wd=zoj+1004&inputT=3594
[/Quote]

测了
aaaa
aaaa
这种,输出的是正确的。觉得可以概括很多情况了。
violet_xrym 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

有没有说长度限制?会出现多于100个字符的情况吗?
[/Quote]

看别人的数组大概也开这么大。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧