要叫我三金吗 2022-04-22 18:33 采纳率: 50%
浏览 93

L2-3 浪漫侧影 (25 分)天梯杯模拟赛

问题遇到的现象和发生背景

天梯杯模拟赛L2-3题 只拿了17分

问题相关代码,请勿粘贴截图

//ÀËÂþ²àÓ°
#include<iostream>
#include<map>
using namespace std;
int n;
int mid[10000];
int last[10000];
int max_len=0;
map<int,int> v[10000];
typedef struct tree{
    int data;
    int i;
    int deep;
    tree* left;
    tree* right;
};
tree* create(int m_i,int l_i,int range){
    tree* t = (tree*)malloc(sizeof(tree));
    if(range<=0)return NULL;
    t->data=last[l_i];
    int r_l=0;
    for(r_l=0;m_i+r_l<range;r_l++){
        if(mid[m_i+r_l]==t->data)break;
    }
    int r_r=range-r_l-1;
    t->left=create(m_i,l_i-r_r-1,r_l);
    t->right=create(m_i+r_l+1,l_i-1,r_r);
    return t;
}
void get_i(tree* t,int d,int i){
    if(t){
        t->deep=d;
        //第d层索引为i的值为t->data
        v[d][i]=t->data;
        if(d>max_len)max_len=d;
        t->i=i;
        get_i(t->left,d+1,i*2);
        get_i(t->right,d+1,i*2+1);
    }
    return;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>mid[i];
    }
    for(int i=0;i<n;i++){
        cin>>last[i];
    }
    if(n==0){
        return 0;
    }
    tree* root=create(0,n-1,n);
    get_i(root,1,1);
    //´òÓ¡ÓÒ±ß
//    printf("R:");
//    p_r(root);
//    printf("\nL:");
//    p_l(root);
//    p_l(root);
//ÀÏ°æ±¾17·Ö´úÂë 
    printf("R:");
    map<int,int>::iterator it;
    for(int i=1;;i++){
        if(v[i].size()>0){
            it=v[i].end();
            it--;
            printf(" %d",it->second);            
        }else{
            break;
        }
    }
    printf("\n");
    printf("L:");
    for(int i=1;;i++){
        if(v[i].size()>0){
            it=v[i].begin();
            printf(" %d",it->second);            
        }else{
            break;
        }
    }
    return 0;
} 
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • 想出成果的acmer 2022-04-23 20:02
    关注
    
     
    //ÀËÂþ²àÓ°
    #include<iostream>
    #include<map>
    using namespace std;
    int n;
    int mid[10000];
    int last[10000];
    int max_len=0;
    map<int,int> v[10000];
    typedef struct tree{
        int data;
        int i;
        int deep;
        tree* left;
        tree* right;
    };
    tree* create(int m_i,int l_i,int range){
        tree* t = (tree*)malloc(sizeof(tree));
        if(range<=0)return NULL;
        t->data=last[l_i];
        int r_l=0;
        for(r_l=0;r_l<range;r_l++){
            if(mid[m_i+r_l]==t->data)break;
        }
        int r_r=range-r_l-1;
        // cout<<r_l<<" "<<r_r<<endl;
        t->left=create(m_i,l_i-r_r-1,r_l);
        t->right=create(m_i+r_l+1,l_i-1,r_r);
        return t;
    }
    void get_i(tree* t,int d,int i){
        if(t){
            t->deep=d;
            //第d层索引为i的值为t->data
            v[d][i]=t->data;
            if(d>max_len)max_len=d;
            t->i=i;
            get_i(t->left,d+1,i*2);
            get_i(t->right,d+1,i*2+1);
        }
    }
    int main(){
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>mid[i];
        }
        for(int i=0;i<n;i++){
            cin>>last[i];
        }
        if(n==0){
            return 0;
        }
        tree* root=create(0,n-1,n);
        get_i(root,1,1);
        //´òÓ¡ÓÒ±ß
    //    printf("R:");
    //    p_r(root);
    //    printf("\nL:");
    //    p_l(root);
    //    p_l(root);
    //ÀÏ°æ±¾17·Ö´úÂë 
        printf("R:");
        map<int,int>::iterator it;
        for(int i=1;;i++){
            if(v[i].size()>0){
                it=v[i].end();
                it--;
                printf(" %d",it->second);            
            }else{
                break;
            }
        }
        printf("\n");
        printf("L:");
        for(int i=1;;i++){
            if(v[i].size()>0){
                it=v[i].begin();
                printf(" %d",it->second);            
            }else{
                break;
            }
        }
        return 0;
    } 
    
    评论

报告相同问题?

问题事件

  • 创建了问题 4月22日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂