1 条题解

  • 0
    @ 2024-12-24 10:06:07

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    class tree
    {
    public:
    	tree *f,*l,*r;
    	int a[11];
    	int num;
    	tree(tree* aa,int n) // 构造函数,利用 new 调用
    	{
    		f=aa;
    		l=NULL;
    		r=NULL;
    		num = n;
    		memset(a,0,sizeof(a));
    	};
    	tree()//默认构造
    	{
    	    f=NULL;
    	    l=NULL;
    	    r=NULL;
    	    num = 0;
    		memset(a,0,sizeof(a));
    	};
    };
    /*
    void delet(tree* te)//dfs - 深搜删除被使用过的节点
    {
    	if(te->l!=NULL )
    	{
    		delet(te->l);
    		delete(te->l);
    	}
    	if(te->r!=NULL )
    	{
    		delet(te->r);
    		delete(te->r);
    	}
    }
    */
    
    void insert(int deep,int n,int m,tree* te,int num)
    {
    	if(deep == n)
    	{
    		if(te->l != NULL )
    		{
    			te->r = new tree(te,num);
    		}
    		else
            {
                te->a[n+1]++;
    			te->l = new tree(te,num);
            }
    	}
    	else if(te->a[n] >=m)
    	{
    		te->a[n+1]++;
    		insert(deep+1,n,m,te->l,num);
    	}
    	else
    	{
    		insert(deep+1,n,m - te->a[n],te->r,num);
    	}
    }
    
    int serch(int deep,int n,int m,tree* te)
    {
    	if(deep == n-1)
    	{
    		if(m>2)
    			return 0;
    		else if(m==1)
    		{
    			if(te->l ==NULL)
    			{
    				return 0;
    			}
    			return te->l->num;
    		}
    		else
    		{
    			if(te->l==NULL || te->r == NULL )
    				return 0;
    			return te->r->num;
    		}
    	}
    	else if(te->a[n] >=m)
    	{
    		serch(deep+1,n,m,te->l);
    	}
    	else
    	{
    		if(te->r!=NULL )
    			serch(deep+1,n,m - te->a[n] ,te->r);
    		else
    			return 0;
    	}
    }
    int main()
    {
    	int k,n,m,num;
        tree* temp = new tree();
    	while(cin>>k>>n>>m)
    	{
    		if(k==1)
    		{
    		    cin>>num;
    			insert(1,n,m,temp,num);
    		}
    		else
    		{
    		    if(n==1)
                {
                    puts(m==1?"0":"no");
                }
                else
                {
                    int k = serch(1,n,m,temp);
                    if(k==0)
                    {
                        puts("no");
                    }
                    else
                    {
                        printf("%d\n",k);
                    }
                }
    		}
    	}
    	//delete(temp);
    	return 0;
    }
    
    
    • 1

    信息

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