小美的梯子

[题目链接](https://www.nowcoder.com/practice/bd5627c6d0c14951b8072830e26a041b)

思路

每个梯子的形状为 |=|,由左右各一个 | 和中间一个 = 组成。多个梯子排成一行时,相邻梯子可以共用 |,例如两个梯子为 |=|=|

观察规律: 个梯子需要 |=。设有 |=,则:

  • | 的约束:,即
  • = 的约束:

因此答案为 。注意当 时无法构成任何梯子,答案为

复杂度分析

  • 时间复杂度:,只需一次读入和一次取最小值运算。
  • 空间复杂度:,仅使用常数个变量。

代码

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    long long a, b;
    cin >> a >> b;
    if (a < 2) {
        cout << 0 << endl;
    } else {
        cout << min(a - 1, b) << endl;
    }
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long a = sc.nextLong();
        long b = sc.nextLong();
        if (a < 2) {
            System.out.println(0);
        } else {
            System.out.println(Math.min(a - 1, b));
        }
    }
}