Official
B - 省エネ作戦 / Energy-Saving Strategy Editorial
by
B - 省エネ作戦 / Energy-Saving Strategy Editorial
by
kyopro_friends
省エネモードにすることで削減される消費電力はおよそ \(\frac{A_i}{2}\) であることから、消費電力が大きな機器から順に省エネモードにするのが最適です。よって、\(A\) をソートし、大きい方から \(K\) 個は \(2\) で割ってから、残りはそのまま合計したものが答えとなります。
ソートにより計算量は O\((N\log N)\) となります。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, k;
cin >> n >> k;
vector<int>a(n);
for(int i=0; i<n; i++) cin >> a[i];
sort(a.begin(), a.end());
long long ans=0;
for(int i=0; i<n-k; i++) ans += a[i];
for(int i=n-k; i<n; i++) ans += a[i] / 2;
cout << ans << endl;
}
実装例 (Python)
N, K = map(int, input().split())
A = list(map(int, input().split()))
A.sort()
ans = sum(A[:-K]) + sum(x//2 for x in A[-K:])
print(ans)
posted:
last update:
