1 条题解

  • 0
    @ 2022-3-24 19:21:18

    给定长度为 nn 的序列 aa

    如果 aiai+1a_i \neq a_{i+1} 则可以合并 aia_iai+1a_{i+1},合并的元素后值为它们的和,总元素个数减一。

    求进行若干次合并操作后最后元素个数的最小值。

    1n2×1051 \le n \le 2 \times 10 ^ 51ai1091 \le a_i \le 10^9

    对于序列的最大值,除非两边点值都和它相同,否则它就可以一直合并直到只剩一个。

    所以分类讨论一下,是不是所有元素都相等。

    CODE
    #include <bits/stdc++.h>
    using namespace std;
     
    inline int read() {
        int x = 0, f = 0; char c = 0;
        while (!isdigit(c)) f |= c == '-', c = getchar();
        while (isdigit(c)) x = (x << 3) + (x << 1) + (c & 15), c = getchar();
        return f ? -x : x;
    }
     
    int a[200010];
     
    int main() {
        for (int T = read(); T --;) {
            int n = read(), id = 0, same = 1;
            for (int i = 1; i <= n; i ++) {
                a[i] = read();
                if (i != 1 && a[i - 1] != a[i]) same = 0;
            }
            if (same) printf("%d\n", n);
            else puts("1");
       }
        return 0;
    }
    
    • 1

    信息

    ID
    806
    时间
    2000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者