题解:P12133 [蓝桥杯 2025 省 B] 产值调整

· · 题解

题解

取平均的操作会使数组的极差变得越来越小,直到为 0,使得 a = b = c,这时题目中的三个操作均无法影响到这三个数的值,所以在 a = b = c 时直接退出即可。

最终尝试次数大概会在 \log_2 (\max\{a, b, c\} - \min\{a, b, c\}) 左右,完全可以接受

代码

typedef long long LL;
array<LL, 3> proc(int x, int y, int z){
    return {
        (y + z) / 2, (x + z) / 2, (x + y) / 2
    };
}

void solve(){
    LL k, a, b, c;
    cin >> a >> b >> c >> k;
    for(int i = 0; i < k; ++i){
        array<LL, 3> tmp = proc(a, b, c);
        a = tmp[0], b = tmp[1], c = tmp[2];
        if(a == b and b == c) break;
    }
    cout << a << " " << b << " " << c << endl;
    return;
}