Official
C - エアコンの温度調整 / Air Conditioner Temperature Adjustment Editorial by admin Editorial for printing
Qwen3-Coder-480B概要
各部屋の温度を目標温度以下にするために必要な冷却パックの最小個数を求めます。
考察
各部屋の現在の温度 \(T_i\) が目標温度 \(M\) を超えている場合、その差 \(T_i - M\) を冷却パックで解消する必要があります。
1つの冷却パックで \(D\) 度下げることができるので、必要な個数は \(\left\lceil \frac{T_i - M}{D} \right\rceil\) 個です(小数点以下を切り上げる)。
例えば、部屋の温度が \(10\) 度、目標が \(3\) 度、1パックで \(2\) 度下げられるとすると、必要な冷却量は \(7\) 度なので、\(\left\lceil 7 / 2 \right\rceil = 4\) 個必要になります。
素朴な方法として、1パックずつ温度を下げていくシミュレーションを行うと、\(D\) が非常に大きい場合に時間がかかりすぎてしまい、TLE(時間制限超過)になります。
そこで、数学的に必要なパック数を直接計算することで効率よく解くことができます。
アルゴリズム
- 各部屋の温度 \(T_i\) に対して、\(T_i > M\) であれば、必要な冷却量 \(T_i - M\) を計算します。
- 必要な冷却パックの個数を \(\left\lceil \frac{T_i - M}{D} \right\rceil\) で求め、合計に加算します。
- 最終的な合計値が答えとなります。
計算量
- 時間計算量: \(O(N)\)
- 空間計算量: \(O(1)\) (入力分を除く)
実装のポイント
math.ceil()を使って切り上げ処理を行うこと。- 温度がすでに \(M\) 以下であれば無視してよい。
- 入力の範囲が大きいため、効率の良い計算が必要(シミュレーションは不可)。
## ソースコード
```python
import math
# 入力の読み込み
N, M, D = map(int, input().split())
T = list(map(int, input().split()))
# 必要な冷却パックの合計個数
total_packs = 0
for temp in T:
if temp > M:
# 温度をM以下にするために必要な冷却量
need_cooling = temp - M
# 必要な冷却パックの個数(切り上げ)
packs_needed = math.ceil(need_cooling / D)
total_packs += packs_needed
# 結果の出力
print(total_packs)
この解説は qwen3-coder-480b によって生成されました。
posted:
last update: