Official

B - 植物の温度管理 / Plant Temperature Management Editorial by physics0523


まず、各部屋について、その部屋を選ぶ場合に増加する電気代を求めます。

  • \(T_i < L\) なら、 \(L\) 度まで上げればよいので増加する電気代は \(L-T_i\) 円である。
  • \(L \le T_i \le R\) なら、温度を変更する必要がないので増加する電気代は \(0\) 円である。
  • \(R < T_i\) なら、 \(R\) 度まで下げればよいので増加する電気代は \(T_i-R\) 円である。

この「増加する電気代」を配列に格納し、昇順(低い方から高い方へ)にソートして、小さい方から \(K\) 部屋を採用することで電気代を最小にすることができます。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;
using ll=long long;

int main(){
  ll n,k,l,r;
  cin >> n >> k >> l >> r;
  vector<ll> t(n);
  for(ll i=0;i<n;i++){
    cin >> t[i];
    if(t[i]<l){t[i]=l-t[i];}
    else if(t[i]>r){t[i]=t[i]-r;}
    else{t[i]=0;}
  }
  sort(t.begin(),t.end());

  ll res=0;
  for(ll i=0;i<k;i++){ res+=t[i]; }
  cout << res << "\n";
  return 0;
}

posted:
last update: