题解:CF2131B Alternating Series

· · 题解

题意简化

给你一个正整数 N ,输出一个长度为 N 的“优质数组”,满足以下条件:

思路

要使绝对值序列字典序最小,前几个元素应尽可能取小绝对值,并且数组中正数的和要大于负数和的绝对值。

观察样例,当 N23 时,数组分别为 \{-1, 2\}\{-1, 3, -1\},由此可知每个“优质数组”都应该为 -1 开头。

所以,对于任意长度 N ,其“美好数组”都应该为 \{-1, ?, -1, ?, -1, ?, -1, \dots\}

再来看第 2 个条件,在连续子序列和为正数字典序最小这两个条件下,我们来依次尝试:

我们发现,当数组的结尾为正数时, \{-1, 3, -1, 3\} 并不优,因为 -1 + 3 = 2 ,而如果结尾是 2-1 + 2 = 1,符合题意。

所以,我们重新整理一下思路:

Code

具体做法已经在前面说了,所以就不加注释了。

#include <bits/stdc++.h>

using namespace std;

namespace RealDream {
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        int t;
        cin >> t;
        while (t--) {
            int n;
            cin >> n;
            for (int i = 0; i < n; i++) {
                if (i % 2 == 0) {
                    cout << -1;
                } else {
                    if (i == n - 1) cout << 2;
                    else cout << 3;
                }
                if (i < n - 1) {
                    cout << " ";
                }
            }
            cout << endl;
        }
        return 0;
    }
};

int main() {
    RealDream::main();
    return 0;
}