1 条题解

  • 0
    @ 2025-8-24 21:28:01

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar RockyQ012
    **

    搬运于2025-08-24 21:28:00,当前版本为作者最后更新于2024-06-10 20:03:48,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    题目大意

    一数轴上有三点,每次把最大或最小的一点牛移到另外两点的中间,求最大和最小的移动次数。

    思路

    首先

    排序。

    最大值

    把端点移到中间点的一侧,然后继续选取移动后的端点重复上述操作直到三点相邻,由于有两个端点,所以有两种方法,大的那一个就是最大值。

    最小值

    第一种是三个点已相邻,直接输出两个 00 后结束程序。 第二种是有两个点相隔 22,将第三点插入这两点之间即可,此时的最小值为 11。 第三种是先通过一次移动,使其变为可能性 22,然后按可能性 22 操作即可,此时的最小值为 22

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a[3];
        cin >> a[0] >> a[1] >> a[2];
        sort(a , a + 3);
        int x = a[1] - a[0] , y = a[2] - a[1];
        if(x == 1 && y == 1) 
        {
            cout << 0 << endl;
            cout << 0 << endl;
            return 0;
        }
        if (a[2] - a[1] == 2 || a[1] - a[0] == 2)
        {
            cout << 1 << endl;
        }
        else
        {
            cout << 2 << endl;
        }
        cout << max(x , y) - 1;
        return 0;
    }
    
    • 1

    信息

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