問題の理解がちょっと大変。数学の素養がないと厳しいかもしれない。
問題概要
正の整数 ( を満たす) が与えられる。
また、 個の整数 が与えられるので、各 について、次の条件を満たす整数 を求めよ。
- である
- 以上 以下の任意の整数 に対して、 を満たす
制約
考えたこと
まず、問題を理解するのが大変だ。こういうときは、具体例で掴んでみよう。たとえば、, としてみよう。そして、いろんな を試してみて、 を求めてみる。そうすると様子が掴めてくる。
なお、 とは「数 と数 の差」を表すということに留意しておこう。
- のとき、 以上 以下の整数のうち、 との差が最も小さいものは である。よって、答えは 4。
- のとき、同じく、答えは 4・
- のとき、同じく、答えは 4
- のとき、 以上 以下の整数のうち、他でもない がその差を 0 にすることができて、最も小さい。よって、答えは 5。
- のとき、同じく、答えは 6
- のとき、同じく、答えは 7
- のとき、 以上 以下の整数のうち、 との差が最も小さいものは である。よって、答えは 7。
- ...
というように手を動かしてみよう。段々と次のことがわかってくるはずだ。
- のときは、 との差が最も小さいのは
- のときは、 との差が最も小さいのは
- のときは、 との差が最も小さいのは
これを実装すれば正解できる。
コード
#include <bits/stdc++.h> using namespace std; int main() { long long N, L, R; cin >> N >> L >> R; for (int i = 0; i < N; ++i) { long long A; cin >> A; if (A < L) cout << L << " "; else if (A > R) cout << R << " "; else cout << A << " "; } cout << endl; }