Official

C - Minimize Abs 1 Editorial by nok0


場合分けにより \(A_i\) に対する答えを求めましょう。

  • \(A_i\)\(L\) 以上 \(R\) 未満のときは、\(A_i\) が答えです。

  • \( A_i\)\(L\) 未満のときは、\(L\) が答えです。

  • \(A_i\)\(R\) 以上のときは、\(R\) が答えです。

後は、これを if 文を用いて実装することで AC を得ることができます。

if 文を用いない方針についても記します。求める答えは、 \(\min{(\max{(L,A_i)},R)}\) とあらわすことができます。多くの言語では max, min が関数としてあるので、それを用いるとより簡単に実装できます。

更に、C++では \(\min{(\max{(L,A_i)},R)}\) 自体が関数として標準ライブラリに存在します。 std::clamp(A_i,L,R) を用いると良いです。

実装例(C++):

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

#define rep(i, x) for(int i = 0; i < (x); i++)

int main() {
    int n, l, r;
    cin >> n >> l >> r;
    vector<int> a(n);
    rep(i, n) cin >> a[i];
    rep(i, n) cout << clamp(a[i], l, r) << " \n"[i == n - 1];
}

posted:
last update: