시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
6 초 | 1024 MB | 8 | 4 | 4 | 100.000% |
20XX년 국제정보올림피아드에서는 혼성 종목이 신설되었다. 혼성 종목에서는 남학생 한 명과 여학생 한 명이 팀을 이루어 문제를 풀게 된다. 정보올림피아드위원회에서는 혼성 종목에 참가할 대표팀을 만들기 위해 $N$명의 남학생 후보와 $M$명의 여학생 후보를 선발했다. $N$명의 남학생 후보들에게는 $0$번부터 $N - 1$번까지의 번호가 붙어 있다. 마찬가지로, $M$명의 여학생 후보들에게는 $0$번부터 $M - 1$번까지의 번호가 붙어 있다.
팀의 실력에는 팀을 구성하는 두 학생의 발상 능력과 구현 능력이 모두 영향을 준다. 학생들의 발상 능력과 구현 능력은 $1$ 이상 $10^9$ 이하의 정수로 나타낼 수 있다. $i$번 남학생의 발상 능력은 $A_1[i]$, 구현 능력은 $B_1[i]$이다. 또한, $j$번 여학생의 발상 능력은 $A_2[j]$, 구현 능력은 $B_2[j]$이다. $i$번 남학생과 $j$번 여학생이 한 팀을 이룬다면, 이 팀의 실력은 $(A_{1}[i] + A_{2}[j]) \times (B_{1}[i] + B_{2}[j])$로 정의된다.
학생들은 모두 치열한 경쟁을 거쳐 선발된 후보이기 때문에, 어떤 남학생이 다른 남학생보다 발상 능력과 구현 능력이 모두 뛰어난 경우는 없다. 더 정확하게는, 남학생들의 발상 능력은 번호가 커짐에 따라 증가하고, 구현 능력은 번호가 커짐에 따라 감소한다. 즉, $0 \le i \le N - 2$에 대해 $A_1[i] < A_1[i + 1]$과 $B_1[i] > B_1[i + 1]$이 성립한다. 마찬가지로, 여학생들 또한 발상 능력은 번호가 커짐에 따라 증가하고, 구현 능력은 번호가 커짐에 따라 감소한다. 즉, $0 \le j \le M - 2$에 대해 $A_2[j] < A_2[j + 1]$과 $B_2[j] > B_2[j + 1]$이 성립한다.
정보올림피아드위원회에서는 다양한 시나리오에 따라 팀의 실력이 최대가 되도록 팀을 구성하고자 한다. $0$부터 $Q - 1$번까지 번호가 붙은 $Q$개의 시나리오가 존재한다. $k$번 시나리오에서, 남학생의 번호는 $L_1[k]$ 이상 $R_1[k]$ 이하가 되어야 하고, 여학생의 번호는 $L_2[k]$ 이상 $R_2[k]$ 이하가 되어야 한다. 각 시나리오에 대해, 조건을 만족하며 구성할 수 있는 팀의 실력의 최댓값을 구하는 프로그램을 작성하여라.
여러분은 아래 함수를 구현해야 한다.
vector<long long> build_teams(vector<int> A1, vector<int> B1, vector<int> A2, vector<int> B2, vector<int> L1, vector<int> R1, vector<int> L2, vector<int> R2)
제출하는 소스 코드의 어느 부분에서도 입출력 함수를 실행해서는 안 된다.
번호 | 배점 | 제한 |
---|---|---|
1 | 5 | $N \le 500$, $M \le 500$, $Q \le 500$. |
2 | 10 | $Q \le 20$. |
3 | 10 | $0 \le k \le Q - 1$에 대해 $L_2[k] = 0$, $R_2[k] = M - 1$. |
4 | 35 | $0 \le k \le Q - 1$에 대해 $L_2[k] = R_2[k]$, |
5 | 40 | 추가적인 제약 조건이 없다. |
$N = 5$, $M = 4$, $A_1 = [2, 7, 8, 9, 10]$, $B_1 = [10, 9, 8, 6, 1]$, $A_2 = [1, 3, 5, 9]$, $B_2 = [10, 8, 7, 5]$, $Q = 3$, $L_1 = [0, 2, 1]$, $R_1 = [4, 3, 1]$, $L_2 = [1, 0, 0]$, $R_2 = [3, 2, 0]$ 인 경우를 생각해 보자.
그레이더는 다음과 같이 함수를 호출한다.
build_teams([2, 7, 8, 9, 10], [10, 9, 8, 6, 1], [1, 3, 5, 9], [10, 8, 7, 5], [0, 2, 1], [4, 3, 1], [1, 0, 0], [3, 2, 0])
$0$번 시나리오에서, 남학생의 번호는 $0$ 이상 $4$ 이하, 여학생의 번호는 $1$ 이상 $3$ 이하가 되어야 한다. $1$번 남학생과 $3$번 여학생으로 팀을 구성하면 팀의 실력은 $(7 + 9) \times (9 + 5) = 224$ 가 된다. 이것은 조건을 만족하며 구성할 수 있는 팀의 실력 중 최댓값이다.
$1$번 시나리오에서, 남학생의 번호는 $2$ 이상 $3$ 이하, 여학생의 번호는 $0$ 이상 $2$ 이하가 되어야 한다. $2$번 남학생과 $2$번 여학생으로 팀을 구성하면 팀의 실력은 $(8 + 5) \times (8 + 7) = 195$ 가 된다. 이것은 조건을 만족하며 구성할 수 있는 팀의 실력 중 최댓값이다.
$2$번 시나리오에서, 남학생의 번호는 $1$이고 여학생의 번호는 $0$이어야 한다. 팀의 실력은 $(7 + 1) \times (9 + 10) = 152$ 이다.
따라서 함수는 $[224, 195, 152]$ 를 반환해야 한다.
$N = 4$, $M = 2$, $A_1 = [1, 6, 8, 10]$, $B_1 = [9, 5, 3, 1]$, $A_2 = [5, 6]$, $B_2 = [8, 7]$, $Q = 4$, $L_1 = [0, 1, 2, 3]$, $R_1 = [0, 1, 2, 3]$, $L_2 = [0, 0, 0, 0]$, $R_2 = [1, 1, 1, 1]$ 인 경우를 생각해 보자.
그레이더는 다음과 같이 함수를 호출한다.
build_teams([1, 6, 8, 10], [9, 5, 3, 1], [5, 6], [8, 7], [0, 1, 2, 3], [0, 1, 2, 3], [0, 0, 0, 0], [1, 1, 1, 1])
$0$번 시나리오에서, $0$번 남학생과 $1$번 여학생을 고르면 팀의 실력은 $(1 + 6) \times (9 + 7) = 112$ 가 된다.
$1$번 시나리오에서, $1$번 남학생과 $1$번 여학생을 고르면 팀의 실력은 $(6 + 6) \times (5 + 7) = 144$ 가 된다.
$2$번 시나리오에서, $2$번 남학생과 $0$번 여학생을 고르면 팀의 실력은 $(8 + 5) \times (3 + 8) = 143$ 가 된다.
$3$번 시나리오에서, $3$번 남학생과 $0$번 여학생을 고르면 팀의 실력은 $(10 + 5) \times (1 + 8) = 135$ 가 된다.
이들은 모두 각 시나리오의 조건을 만족하며 구성할 수 있는 팀의 실력 중 최댓값이다. 따라서 함수는 $[112, 144, 143, 135]$ 를 반환해야 한다.
Sample grader는 아래와 같은 형식으로 입력을 받는다.
Sample grader는 다음을 출력한다.
build_teams
가 반환한 배열의 $k$번째 원소Sample grader는 실제 채점에서 사용하는 그레이더와 다를 수 있음에 유의하라.
Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2023 > 2차 선발고사 4번
C++17, C++20, C++17 (Clang), C++20 (Clang)