1 条题解

  • 2

    一直都没写过题解,这道题对于C++压的一点也不狠,建议数据范围改成 \(5*10^6\) 。

    这里时间复杂度只能给到 O(n),但一般做法还是太极限了,以下为 800ms 的代码。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[10];
    int main()
    {
        ios::sync_with_stdio(false);//没有这个你就报废了
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            char x;
            cin>>x;
            a[x-'0']++;
        }
        if(a[0])
        {
            for(int i=1;i<=9;i++)
                if(a[i]>=1)
                {
                    a[i]--;
                    cout<<i;
                    break;
                }
        }
        for(int i=0;i<=9;i++)
            if(a[i]>=1)
            {
                while(a[i]--)
                    cout<<i;
            }
        return 0;
    }
    

    当然时间复杂度那么高是不行的,小小改一下输出就行了,时间给到 380 ms。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[10];char b[10];
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n;
        for(int i=0;i<=9;i++)
            b[i]=i+'0';
        for(int i=1;i<=n;i++)
        {
            char x;
            cin>>x;
            a[x-'0']++;
        }
        if(a[0])
        {
            for(int i=1;i<=9;i++)
                if(a[i]>=1)
                {
                    a[i]--;
                    putchar(b[i]);
                    break;
                }
        }
        for(int i=0;i<=9;i++)
            if(a[i]>=1)
            {
                while(a[i]--)
                    putchar(b[i]);
            }
        return 0;
    }
    

    当然输入也可以压时间,这边就不推荐了。

  • 1

信息

ID
1865
难度
8
分类
(无)
标签
递交数
21
已通过
5
通过率
24%
被复制
6
上传者