公式
B - スマートフォンのバッテリー / Smartphone Battery 解説
by
B - スマートフォンのバッテリー / Smartphone Battery 解説
by
kyopro_friends
\(N\) 台のスマートフォンは、現在のバッテリー残量に基づいて、「既に電池切れ」「充電しないと電池切れ」「充電しなくても大丈夫」の3種類のグループに分けられます。
このうち最初の1,3番目のグループのものは充電しようがしまいが結果に変化はありません。2つ目のグループのものを充電すると、最終的に使えるスマートフォンが1台増えます。よって、充電器は可能限りこのグループに割り当てるのが最適です。
以上より3つのグループに属するスマートフォンの数をそれぞれ \(P,Q,R\) とすると、求める答えは \(R+\min(K,Q)\) となります。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, l, k, y;
cin >> n >> l >> k >> y;
vector<int>a(n);
for(int i=0; i<n; i++) cin >> a[i];
int q = 0, r = 0;
for(int i=0; i<n; i++){
if(l < a[i] && a[i] <= l + y){
q++;
}else if(l + y < a[i]){
r++;
}
}
cout << r + min(k, q) << endl;
}
実装例 (Python)
N, L, K, Y = map(int, input().split())
A = list(map(int, input().split()))
Q, R = 0, 0
for a in A:
if L < a <= L+Y:
Q += 1
elif L+Y < a:
R += 1
print(R + min(K, Q))
