※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 3110번 문제인 부등식이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/3110 

 

3110번: 부등식

첫째 줄에 B, C, D가 주어진다. (1 ≤ B, C, D ≤ 1000) 둘째 줄에 A1, A2가 주어진다. (1 ≤ A1, A2 ≤ 1000) 셋째 줄에 E1, E2가 주어진다. (1 ≤ E1, E2 ≤ 1000)

www.acmicpc.net

분모가 B, C, D인 분수의 분자를 각각 y, x, z라 하자.

 

주어지는 모든 정수가 1 이상 1000 이하이므로 가능한 x의 경우의 수는 100만가지 이하이다.

따라서, 각 x값마다 가능한 y의 개수, z의 개수를 구해 둘을 곱해 더하는 것으로 충분히 빠르게 답을 계산할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	ll ans = 0;
	ll A1, A2, B, C, D, E1, E2; cin >> B >> C >> D >> A1 >> A2 >> E1 >> E2;
	if (A1 * E2 < A2 * E1) {
		ll iterL = (A1 * C) / A2, iterR = (E1 * C) / E2;
		if ((E1 * C) % E2) iterR++;
		for (ll x = iterL; x < iterR; x++) {
			ll L1 = (A1 * B) / A2, R1 = (x * B) / C;
			if ((x * B) % C) R1++;
			ll L2 = x * D / C, R2 = E1 * D / E2;
			if ((E1 * D) % E2) R2++;
			ans += max(0LL, (R1 - L1 - 1)) * max(0LL, (R2 - L2 - 1));
		}

		cout << ans;
	}
	else cout << 0;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24356 // C++] ЧАСОВНИК  (0) 2022.04.17
[BOJ 3002 // C++] 아날로그 다이얼  (0) 2022.04.16
[BOJ 3111 // C++] 검열  (0) 2022.04.14
[BOJ 24912 // C++] 카드 색칠  (0) 2022.04.13
[BOJ 24884 // C++] 장작 넣기  (0) 2022.04.12

+ Recent posts