1 条题解

  • 0
    @ 2025-10-10 20:11:59

    C :

    #include<stdio.h>
    #include<stdlib.h>
    int a[1005],t[1005];
    int h,p,n,m,x,f;
    void p1(int k){
    	if (f) { printf("%d",t[k]); f=0;}
    		else printf(" %d",t[k]); 
    	if (2*k<=n) p1(2*k);
    	if (2*k+1<=n) p1(2*k+1);
    }
    void p2(int k){
    	if (2*k<=n) p2(2*k);
    	if (f) { printf("%d",t[k]); f=0;}
    		else printf(" %d",t[k]); 
    	if (2*k+1<=n) p2(2*k+1);
    }
    void p3(int k){
    	if (2*k<=n) p3(2*k);
    	if (2*k+1<=n) p3(2*k+1);
    	if (f) { printf("%d",t[k]); f=0;}
    		else printf(" %d",t[k]); 
    }
    
    int main(){
    	int i;
    	scanf("%d%d",&h,&p);
    	n=(1<<h)-1;
    	i=0;
    	while (i<n) {
    		scanf("%d",&x);
    		if (a[x]==0) {
    			i++;
    			t[i]=x;
    			a[x]=1;
    		}
    	}
    	f=1;
    	if (p==1) p1(1);
    	if (p==2) p2(1);
    	if (p==3) p3(1);
    	return 0;
    }
    
    

    C++ :

    #include <iostream>
    #include <vector>
    #include <map>
    #include <set>
    #include <string>
    #include <algorithm>
    #include <math.h>
    #include <string.h>
    #include <stack> 
    
    using namespace std;
    
    void find1(int i,vector<int> vec,int &count){
    	if(count==1){
    		count++;
    		cout<<vec[i];
    	}
    	else{
    		cout<<" "<<vec[i];
    	}
    	if(i*2<=vec.size()-1)
    		find1(i*2,vec,count);
    	if(i*2+1<=vec.size()-1)
    		find1(i*2+1,vec,count);
    	return ;
    }
    
    void find2(int i,vector<int> vec,int &count){
    	
    	
    	if(i*2<=vec.size()-1)
    		find2(i*2,vec,count);
    	if(count==1){
    		count++;
    		cout<<vec[i];
    	}
    	else{
    		cout<<" "<<vec[i];
    	}
    	if(i*2+1<=vec.size()-1)
    		find2(i*2+1,vec,count);
    	return ;
    	
    }
    
    void find3(int i,vector<int> vec,int &count){
    	if(i*2<=vec.size()-1)
    		find3(i*2,vec,count);
    	if(i*2+1<=vec.size()-1)
    		find3(i*2+1,vec,count);
    	if(count==1){
    		count++;
    		cout<<vec[i];
    	}
    	else{
    		cout<<" "<<vec[i];
    	}
    	return ;
    }
    
    int main(){
    	int h,p;
    	string str;
    	scanf("%d%d",&h,&p);
    	vector<int> vec;
    	int Num=pow(2,h)-1;
    	int count=0;
    	vec.insert(vec.end(),1001);
    	while(1){
    		int a;
    		scanf("%d",&a);
    		vector<int>::iterator isExit=find(vec.begin(),vec.end(),a);
    		if(isExit==vec.end()){
    			count++;
    			vec.insert(vec.end(),a);
    		}
    		if(count==Num) break;
    	}
    	string strTemp;
    	getline(cin,strTemp);
    	if(p==1){
    		int f=1;
    		find1(1,vec,f);
    	}
    	else if(p==2){
    		int f=1;
    		find2(1,vec,f);
    		
    	}
    	else if(p==3){
    		int f=1;
    		find3(1,vec,f);
    	}
    	cout<<endl;
    	return 0;
    }
    
    
    
    
    
    
    
    
    
    • 1

    信息

    ID
    1088
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者