-
CodeForces 732C-Sanatorium
-
题目链接:C. Sanatorium
-
思路:
题目意思大概就是给定早、中、晚饭的吃饭次数,然后求出最少没吃饭的次数
一般空缺位置就是没吃饭,但第一天和最后一天排外,因为第一天去的时间任意,所以早饭、早饭和午饭在家吃也有可能,不计入,最后一天可能只吃了早饭或者吃了早饭午饭就走人,晚饭的空缺不计入
吐槽:非常难受的一道题,到现在都不怎么理解,求大神~
-
代码一:乱搞,粗暴做
#include<iostream>
#include<algorithm>
using namespace std;
long long Max_Three(long long a, long long b, long long c)
{
return max(a, max(b, c));
}
int main()
{
long long a, b, c;
while (cin >> a >> b >> c)
{
long long Max = Max_Three(a, b, c);
long long Res = 3 * Max - a - b - c;
Max = Max_Three(a + 1, b, c);
Res = min(Res, 3 * Max - a - 1 - b - c);
Max = Max_Three(a + 1, b + 1, c);
Res = min(Res, 3 * Max - a - 1 - b - 1 - c);
Max = Max_Three(a, b + 1, c + 1);
Res = min(Res, 3 * Max - a - b - 1 - c - 1);
Max = Max_Three(a, b + 1, c);
Res = min(Res, 3 * Max - a - b - 1 - c);
Max = Max_Three(a, b + 1, c + 1);
Res = min(Res, 3 * Max - a - b - 1 - c - 1);
Max = Max_Three(a, b, c + 1);
Res = min(Res, 3 * Max - a - b - c - 1);
cout << Res << endl;
}
}
-
代码二:dalao的代码,待理解
#include<iostream>
#include<algorithm>
using namespace std;
long long Meal[3];
int main()
{
while (cin >> Meal[0] >> Meal[1] >> Meal[2])
{
long long Res = 0;
sort(Meal, Meal + 3);
long long Max = Meal[2];
for (int i = 0; i < 3; i++)
{
if (Meal[i] == Max)
Meal[i]--;
}
Max--;
for (int i = 0; i < 3; i++)
Res += Max - Meal[i];
cout << Res << endl;
}
return 0;
}