建议你学会申请全局变量,OI代码基本都要申请全局变量,几个局部变量传来传去很混乱,尤其是传地址,会提高出错率
by CreeperLordVader @ 2019-02-13 20:08:13
你可以看看刘汝佳的《算法竞赛入门经典》里的前4章,那里面不仅有语言知识,还有OI的很多重要技巧,然后看看第5章,学几个基本的STL和C++语法对OI来说基本上就够用了(至少我不是那种狂飙C++11语法特性和大量用指针的)
by CreeperLordVader @ 2019-02-13 20:11:47
@[2307512217csh](/space/show?uid=180355)
方法不对
```cpp
#include <stdio.h>
#include <string.h>
const int MAX_N=10;
char ans[MAX_N];
int pos=0;
inline int find(char *q,char c)
{
char *p;
int i = 0;
for (p=q;1;p++)
{
if (*p==c)
return i;
i++;
}
}
char s[MAX_N]={};
void swap(int a,int b)
{
int t=a;
a=b;
b=t;
}
char *form(char p[],int n,int m)
{
// printf("p1:%s\n",p);
int len_p=strlen(p);
int i,j;
for(i=n,j=0;i<len_p,j<m;i++,j++)
{
s[j]=p[i];
}
s[j]='\0';
// printf("p2:%s\n",p);
return s;
}
void dfs(char in[],char after[],int i)
{
int len_in=strlen(in);
int len_after=strlen(after);
if(len_in>0)
{
char c=after[len_after-1];
ans[pos++]=c;
int k=find(in,c);
// printf("dfs(%d):",i);
// printf("%s\n",in);
dfs(form(in,0,k),form(after,0,k),i+1);
dfs(form(in,k+1,len_in),form(after,k,len_in),i+1);
}
}
int main()
{
char a[10],b[10];
scanf("%s",a);
scanf("%s",b);
dfs(a,b,1);
puts(ans);
return 0;
}
```
by Smile_Cindy @ 2019-02-13 20:24:25
@[CreeperLordVader](/space/show?uid=68207) 灰常感谢您
by 阿狸阿璃 @ 2019-02-14 11:42:42
@[Alpha](/space/show?uid=87058) 灰常感谢您,我试了一下,答案是对的,但评测只有60分。如果不介意的话,我可以问你几个问题吗?第一个,为啥要用数组输出答案啊,单个不行吗?第二个,swap函数交换有啥用啊,好像下面都没用到,第三个,dfs函数为啥有三个参数啊,那个i放进去是因为一定要表示深度吗?第四个,那两个dfs函数递归是同时进行的呢,还是进行完前面一个再进行后一个呢?第五个,form(after,k,len_in)这里为啥不是len_in-1呢,那样不是会多记录一个字符吗?
不好意思,不好意思,我啥都不懂,请见谅,望您能解答我,谢谢。
by 阿狸阿璃 @ 2019-02-14 13:19:39
@[2307512217csh](/space/show?uid=180355)
1.单个的话,调试不方便
2.swap是因为我是C++党,可能要用
3.i是为了方便调试用的
4.先进行第一个后进行第二个
5.len_in和len_in-1一样效果
by Smile_Cindy @ 2019-02-14 13:27:01