公式

C - 教室のエアコン配備 / Air Conditioning Installation in Classrooms 解説 by kyopro_friends


最大値を小さくしたいので、値の大きなものから順に \(0\) に置き換えていくのが最適です。 \(D\) の要素のうち値が大きい方から \(M\) 番目までは \(0\) に置き換えることができるので、求める答えは大きい方から \(M+1\) 番目です。

\(N=M\) のケースでの配列の範囲外アクセスに注意してください。予め \(D\)\(0\) を 1つ追加しておくことで、場合分けをなくすことができます。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n, m;
  cin >> n >> m;
  vector<int>a(n+1);
  for(int i=0; i<n; i++) cin >> a[i];
  a[n] = 0;

  sort(a.rbegin(), a.rend());  // 降順ソート
  cout << a[m] << endl;
}

実装例 (Python)

N, M = map(int, input().split())
A = list(map(int, input().split()))
A.append(0)

A.sort(reverse=True)  # 降順ソート
print(A[M])

投稿日時:
最終更新: