CF1555A题解
-
分析
首先对于小于 \(6\) 的数答案一定是 \(15\)。
然后发现 \(6、8、10\) 分别是 \(3、4、5\) 的二倍,而且对于三种做法做一块披萨所用的时间都是一样的,所以只要一个数能被这三个数凑出来,最后的总用时就是这个数乘以做一块披萨所用的时间。
\(3、4、5\) 作为 \(3、3 + 1、3 + 2\) 可以凑出所有大于 \(3\) 的数,具体凑法是全凑 \(3\),最后余 \(1\) 就把最后一个 \(3\) 换成 \(4\),余 \(2\) 就换成 \(5\)。
所以 \(6、8、10\) 可以凑出所有大于 \(6\) 的偶数,由于披萨只能做多不能做少,所以如果 \(n\) 是偶数,要将 \(n\) 加一变成奇数。
观察到一块披萨需要用 \(\frac{5}{2}\) 分钟做,所以最后的答案为 \(\frac{5n}{2}\)。
数据范围为 \(1 \leq n \leq 10^{16}\),所以需要开 long long。 -
代码
#include <iostream>
#define int long long
using namespace std;
constexpr int MAXN(1000007);
int T, n;
inline void read(int &temp) { cin >> temp; }
inline void work() {
read(n);
if (n < 6) return cout << "15" << endl, void();
if (n & 1) ++n;
return cout << n / 2 * 5 << endl, void();
}
signed main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
read(T);
while (T--) work();
return 0;
}