社区讨论

和题解几乎一样,为什么会mle

P1030[NOIP 2001 普及组] 求先序排列参与者 2已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mlqor0so
此快照首次捕获于
2026/02/17 22:15
前天
此快照最后确认于
2026/02/18 21:48
14 小时前
查看原帖
只有第一个点ac,剩下全mle
请忽略注释,这是我原来写的,也是mle
现在几乎改的和题解一模一样了,但搞不懂为什么过不了
谢谢大家!
CPP
#include<bits/stdc++.h>
using namespace std;
//屎山代码哈,不处
string z,h;
void fun(string z,string h){
    char ch=h[h.size()-1];
    cout<<ch;
    if(z.size()==1||h.size()==1)return ;
    int len=z.find(ch);
    //substr用法:从哪里开始,连续取几个字符
    fun(z.substr(0,len),h.substr(0,len));
    fun(z.substr(len+1,z.size()-len-1),h.substr(len,h.size()-len-1));
}
/*void fun(int z1,int z2,int h1,int h2){//标记中序和后序的起始下标
    char ch=h[h2];//直接获取根结点
    cout<<ch;//华丽输出
    if(z2==z1||h2==h1)    return ;//如果长度到达了1
    /*int len=z1;//记录ch在中序的位置
    //错因1:len应该从z1(当前的开始,而不是全局的开始)开始
    for(;len<=z2;len++)
        if(z[len]==ch)break;
    len--;//因为len++会再多加一次*/
    /*int len=z.find(ch);
    fun(z1,len-1,h1,h1+len-z1);//左子树
    fun(len+1,z2,h1+len-z1+1,h2-1);//右子树
}*/
int main(){
    ios::sync_with_stdio(0);
    cin>>z>>h;
    fun(z,h);
    //fun(0,z.size()-1,0,h.size()-1);
	return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...