题目:No Breakfast for College Students
来源:第三届中国计量大学ACM程序设计竞赛个人赛(同步赛)
解题思路
Gyro 在假期吃了 b
次早餐,l
次午餐,s
次晚餐。
他是在早餐前、午餐前、晚餐前、晚餐后这四个时间段中的某一段到达家里,在这四个时间段的某一段离开。
问 Gyro 在家中最少可能错过了几次进餐。
假设 b = 3, l = 2, s = 1
,早餐次数最多,那么在第一天早餐前到达家里,第三天早餐后离开,错过进餐次数最少。
三种进餐,最多的记为 maxn
,最少的记为 minn
,剩下的那餐记为 midn
。
如果 maxn
与其余两餐的差值 <= 1
,那么其对应的进餐最少都没有错过;
否则,错过进餐次数最少为 maxn - minn - 1
与 maxn - 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; }