1 条题解

  • 0
    @ 2024-12-22 11:04:01

    C :

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int tcase;
        int n,m;
        int p[21];
        int bf;
        scanf("%d",&tcase);
        for(;tcase--;)
        {
            scanf("%d",&n);
            bf=0;
            memset(p,0,sizeof(p));
            while(n--)
            {
               scanf("%d",&m);
               bf=m;//保存m值
               while(p[m])//元素已经填充
               {
                 m-=p[m];
                 p[bf]+=p[m];
                 //p[m]表示不相交括号的值 p[bf]记录所有和
                 //m_pre m_next 相等时,如果p[m-p[m]]==0 即表示 两者左括号相邻
               }
               p[bf]++;
               printf("%d ",p[bf]);
    
            }
            printf("\n");
    
        }
        return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<string.h>
    using namespace std;
    int a[101];
    int main()
    {
        int n,m,bf,x,t;
        cin>>t;
        while(t--)
        {
            cin>>n;
            bf=0;
            memset(a,0,sizeof(a));
            while(n--)
            {
               cin>>m;
               bf=m;
               while(a[m])
               {
                 m-=a[m];
                 a[bf]+=a[m];
               }
               a[bf]++;
               cout<<a[bf]<<' ';
    
            }
            cout<<endl;
        }
    }
    
    
    • 1

    信息

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