[C++] AtCoder Beginner Contest 195 B번 Many Oranges
14 Mar 2021 | PSAtCoder Beginner Contest 195 B번 Many Oranges
문제
https://atcoder.jp/contests/abc195/tasks/abc195_b
풀이
오렌지의 합이 총 W 킬로그램이어야 한다고 할 떄, 오렌지가 N개 필요하다고 가정한다면
AN <= 1000W <= BN 이 성립한다면 오렌지 N개를 사용해서 W 킬로그램을 정확하게 맞출 수 있을것이다.
또한 그 N의 최소, 최대값은 오렌지의 무게의 범위인 A, B 그램으로 나누면 나올것이다.
그 최소, 최대값이 AN <= 1000W <= BN의 범위에 포함이 되는지 안되는지 확인하고 포함되면 해당 최소, 최대값을 그대로 출력
범위를 벗어난다면 UNSATISFIABLE를 출력하면 정답
코드
#pragma warning(disable : 4996)
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
typedef tuple<ll, ll, ll> tl3;
#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define rep(i, n) FOR(i, 0, n)
#define repn(i, n) FORN(i, 1, n)
#define tc(t) while (t--)
// https://atcoder.jp/contests/abc195/tasks/abc195_b
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
ll a, b, w;
cin >> a >> b >> w;
w *= 1000;
bool flag = true;
ll min = ceill((ld)w / b);
if (w / min < a) flag = false;
ll max = w / a;
if (w / max > b) flag = false;
if (flag)
cout << min << " " << max;
else
cout << "UNSATISFIABLE";
return 0;
}