はまやんはまやんはまやん

hamayanhamayan's blog

メダル [yukicoder No.846]

https://yukicoder.me/problems/no/846

解説

ceil(N/P)=AであるNの範囲は、[P*(A-1)+1,P*A]である。
他のメダルについても同様に条件を満たすNの範囲が存在する。
他のメダルについては、そのメダルだけの枚数で計算することになってしまうので、B+=A, C+=Bとして、
銀メダル以上、銅メダル以上として計算をしよう。
すべてのメダルの条件を満たす必要があるので、全ての区間に入っている区間を計算する。
区間[a,b]と区間[c,d]のどちらにも含まれる区間は、[max(a,c), min(b,d)]であるので、これを計算していく。
最後に区間[mi,ma]になったとすると、mi>maになった場合はすべての条件を満たす区間は無いので、-1。
そうでないなら、最小と最大を答える。

ll P, Q, R, A, B, C;
//---------------------------------------------------------------------------------------------------
void _main() {
	cin >> P >> Q >> R >> A >> B >> C;

	B += A;
	C += B;

	ll mi = -infl, ma = infl;

	chmax(mi, P * (A - 1) + 1);
	chmin(ma, P * A);

	chmax(mi, Q * (B - 1) + 1);
	chmin(ma, Q * B);

	chmax(mi, R * (C - 1) + 1);
	chmin(ma, R * C);

	if (mi > ma) cout << -1 << endl;
	else cout << mi << " " << ma << endl;
}