1 条题解

  • 0
    @ 2025-8-24 23:13:00

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar HetmesAskalana
    这个家伙很~懒,什么也没有留下

    搬运于2025-08-24 23:13:00,当前版本为作者最后更新于2025-04-12 14:31:41,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题解

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

    最终尝试次数大概会在 log2(max{a,b,c}min{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;
    }
    
    • 1

    信息

    ID
    11989
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者