1 条题解

  • 0
    @ 2022-3-24 19:47:41

    给定一个长度为 nn 的序列 aa,输出执行以下操作 kk 次后的序列 aa

    • 找到序列元素的最大值 dd,将每个 aia_i 变为 daid - a_i

    1n2×1051 \le n \le 2 \times 10^51k10181 \le k \le 10^18

    手动模拟一下就能发现,kk 是奇数时 ai=daia_i = d - a_i,偶数时 ai=aiga_i = a_i - ggg 是最小值。

    CODE
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
     
    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;
    }
     
    #define INF (1e9 + 7)
    int a[200010];
     
    signed main() {
        for (int T = read(); T --;) {
            int n = read(), k = read(), Mx = -INF, Mn = INF;
            for (int i = 1; i <= n; i ++) {
                a[i] = read();
                Mx = max(Mx, a[i]);
                Mn = min(Mn, a[i]);
            }
            if (k & 1) {
                for (int i = 1; i <= n; i ++) {
                    printf("%lld ", Mx - a[i]);
                }
            } else {
                for (int i = 1; i <= n; i ++) {
                    printf("%lld ", a[i] - Mn);
                }
            }
            puts("");
        }
        return 0;
    }
    
    • 1

    信息

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