1 条题解

  • 0
    @ 2025-2-14 21:20:40

    C++ :

    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int N(83);
    int a[N]={0},f[N]={0},num[N][N]={0},last,end;
    bool flag[N]={0};
    void init()
    {
        char *s=new(char);
        scanf("%s",s);
        for(int i=0;s[i];i++) a[i+1]=s[i]-'0',a[0]=i+1;
        for(int i=1;i<=a[0];i++)
            for(int j=i;j<=a[0];j++)
                num[i][j]=num[i][j-1]*10+a[j];
    }
    void solve()
    {
        f[0]=-1;
        for(int i=2;i<=a[0];i++)
            for(int j=i-1;j>=0;j--)
                if(num[j+1][i]>num[f[j]+1][j])
                {
                    f[i]=j;
                    break;
                }
        last=num[f[a[0]]+1][a[0]];
        end=f[a[0]];
        
        memset(f,0,sizeof(f));
        f[0]=-1;
        for(int i=2;i<=end;i++)
            for(int j=0;j<i;j++)
                if(num[f[j]+1][j]<num[j+1][i]&&num[j+1][i]<last)
                {
                    f[i]=j;
                    break;
                }
        int x=end;
        while(x)
        {
            flag[x]=true;
            x=f[x];
        }
    }
    void print()
    {
        for(int i=1;i<=a[0];i++)
        {
            printf("%d",a[i]);
            if(flag[i])
                printf(",");
        }
        printf("\n");
    }
    int main()
    {
        init();
        solve();
        print();
        return 0;
    }
    
    • 1

    信息

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