题目:No Breakfast for College Students
来源:第三届中国计量大学ACM程序设计竞赛个人赛(同步赛)

解题思路

Gyro 在假期吃了 b 次早餐,l 次午餐,s 次晚餐。
他是在早餐前、午餐前、晚餐前、晚餐后这四个时间段中的某一段到达家里,在这四个时间段的某一段离开。
问 Gyro 在家中最少可能错过了几次进餐。

假设 b = 3, l = 2, s = 1,早餐次数最多,那么在第一天早餐前到达家里,第三天早餐后离开,错过进餐次数最少。
三种进餐,最多的记为 maxn,最少的记为 minn,剩下的那餐记为 midn
如果 maxn 与其余两餐的差值 <= 1,那么其对应的进餐最少都没有错过;
否则,错过进餐次数最少为 maxn - minn - 1maxn - midn - 1 之和。

C++代码

#include<iostream>
using namespace std;

int main(){
    int T;
    cin >> T;
    long long b, l, s;
    while(T){
        --T;
        cin >> b >> l >> s;
        long long maxn = max(max(b, l), s);
        long long minn = min(min(b, l), s);
        long long midn = b + l + s - maxn - minn;
        long long ans = 0;
        if(maxn - minn <= 1)
            ans = 0;
        else if(maxn - midn <= 1)
            ans = maxn - minn - 1;
        else
            ans = maxn - minn + maxn - midn - 2;
        cout << ans << endl;
    }
    return 0;
}