返回顶部

困顿奶牛

题意

题目传送门

即将三个数排成升序所用的最小步骤与最大步骤

做法

分类讨论

  • 已经排好了,最小 \(0\) 步,最大 \(0\) 步。

  • 任意两个之间有空位,最小 \(1\) 步(另个数直接插入中间), 最大就是一个点一个点移动

  • 都不满足,最小 \(2\) 步(另外两个数靠拢任意数),最大也是一个点一个点移动。

注意

计算距离时记得减一。

代码

#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int d1, d2; // 存储距离
int main()
{
    cin >> a >> b >> c;
    d1 = b - a - 1;
    d2 = c - b - 1; // 求两个的距离
    if (d1 == 0 && d2 == 0)
    {
        cout << 0 << endl
             << 0; // 已完成排序,输出0
    }
    else if (d1 == 1 || d2 == 1) // 1 3 5
    {
        cout << 1 << endl; // 两头牛之间有空位,最短为1
        // cout << d2;
        if (d1 - d2 > 0) // 1 3 6
        {
            // 判断是左边大还是右边大
            cout << d1;
        }
        else // 6 9 11
        {
            cout << d2;
        }
    }
    else
    {
        // Default
        cout << 2 << endl; // 114 514 1919810 -> 513 514 515
        // cout << d1;
        if (d1 - d2 > 0)
        {
            cout << d1; // 第一段比第二段大
        }
        else
        {
            cout << d2; // 第一段比第二段小
        }
    }
}

尾声

  • 最近题解都做的少了,原因是都在写博客

感觉不会,就随手做下。

posted @ 2022-02-11 15:07  zrc4889  阅读(25)  评论(1编辑  收藏  举报