[yukicoder] No. 846 メダル
問題
方針
天井関数
\[\lceil \dfrac{x}{y} \rceil = z\]
上記を満たす整数 \( x, y, z \) について、次の不等式が成り立ちます。
\begin{eqnarray}
z – 1 &<& \dfrac{x}{y} \leq z\\
y (z – 1) &<& x \leq yz
\end{eqnarray}
制約条件
\( N \) が満たすべき条件は、
\[ \lceil \dfrac{N}{P} \rceil = A \wedge \lceil \dfrac{N}{Q} \rceil – A= B \wedge \lceil \dfrac{N}{R}\rceil – (A + B)= C\]
よって、上式より、\( N \) の最小値を \( N_1 \) 、最大値を \( N_2 \) とすると、
\[ N_1 = \max (P(A – 1), Q * (A + B – 1), R * (A + B + C – 1)) + 1\]
\[ N_2 = \min (PA, Q * (A + B), R * (A + B + C))\]
となります。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll P, Q, R, A, B, C; cin >> P >> Q >> R >> A >> B >> C; ll nMin = max(P * (A - 1) + 1, max(Q * (A + B - 1) + 1, R * (A + B + C - 1) + 1)); ll nMax = min(P * A, min(Q * (A + B), R * (A + B + C))); if (nMin > nMax) cout << "-1\n"; else cout << nMin << " " << nMax << "\n"; return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません