K 隻牛,N 頁書。第 i 隻牛每分鐘讀 S_i 頁,連續讀 T_i 分鐘,休息 R_i 分鐘。求每隻牛讀完 N 頁所需總時間 (分鐘,向上取整)。
每隻牛獨立模擬:
while (N > 0) {
if (ceil(N / S_i) > T_i) { // 本讀書階段讀不完
N -= S_i * T_i;
time += T_i + R_i; // 讀書 + 休息
} else { // 本階段能讀完
time += ceil(N / S_i);
N = 0;
}
}
#include
#include
using namespace std;
int main() {
double N, K;
while (cin >> N >> K) {
for (int i = 0; i < K; ++i) {
double S, T, R; cin >> S >> T >> R;
double pages = N, time = 0;
while (pages > 0) {
if (ceil(pages / S) > T) {
pages -= S * T;
time += T + R;
} else {
time += ceil(pages / S);
pages = 0;
}
}
cout << (long long)time << '\n';
}
}
return 0;
}
ceil(pages / S) 計算剩餘頁數需讀幾分鐘 (向上取整)。ceil(pages/S) > T 而非 pages > S*T,因向上取整可能導致 pages ≤ S*T 但仍需 T+1 分鐘 (如 pages=10, S=3, T=3,S*T=9<10,但 ceil(10/3)=4>3)。N / (S*T),極小。