1 条题解

  • 0
    @ 2026-9-19 22:51:46

    前言

    题目传送门

    思路

    题一定能读懂吧,多步分析一下思路。

    第一步分析:
    显而易见,当 s0=s_0 = -sn1=s_{n-1}= + 时,是一定不行的。

    第二步分析:
    而最不好处理的是 +- 混在了一起,那么可以考虑分组处理。

    第三步分析:
    一个组中,由于都是一种,所以可以排序处理组内。

    第四步分析:
    现在考虑衔接,衔接可以直接接上,因为端点一定为最大或最小,一定符合条件。

    之后,看代码。

    ::::info[代码]

    #include<iostream>
    using namespace std;
    int n,pa,pb;
    char c;
    int a[300005],b[300005];
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>c;
            if(i==1&&c=='-'||i==n&&c=='+'){
                cout<<"NO";
                return 0;
            }
            if(c=='-') a[++pa]=i;
            if(c=='+') b[++pb]=i;
        }
        cout<<"YES\n";
        for(int i=1;i<=pb;i++){
            cout<<b[i]-1<<' ';
        }
        for(int i=pa;i>=1;i--){
            cout<<a[i]-1<<' ';
        }
        return 0;
    }
    

    ::::

    • 1

    信息

    ID
    12687
    时间
    1000ms
    内存
    1124MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者