Egor의 문제
시간 제한1초메모리 제한1024 MB
정렬된 배열에서 i<j<p<q이고 a_i * a_q = a_j * a_p를 만족하는 인덱스 네 개를 찾거나, 없으면 NO를 출력합니다.
문제
Egor는 훈련 캠프를 위해 어려운 문제를 하나 만들었다. 문제는 다음과 같다.
오름차순으로 정렬된 양의 정수 배열 가 개 주어진다. 를 만족하는 인덱스 4개 를 찾아라.
Egor는 이 문제의 채점 프로그램을 다음과 같이 작성했다.
bool getAnswer(InStream &stream, vector<long long> a) {
string s = stream.readToken("NO|YES"); // PE if the string is not NO or YES
if (s == "NO") return false;
vector<int> b = stream.readInts(4, 1, (int)a.size()); // 4 indices between 1 and n
int i = b[0] - 1, j = b[1] - 1, p = b[2] - 1, q = b[3] - 1; // -1 to make 0-indexed
stream.ensuref(i < j && j < p && p < q, "4 indices should be in increasing order");
stream.ensuref(a[q] / a[p] == a[j] / a[i], "the products are not equal");
return true;
}
곱셈은 long long 범위를 넘을 수 있으므로 Egor는 대신 나눗셈을 사용했다. 그런데 이제 Egor에게는 또 다른 문제가 생겼을지도 모른다.
입력
첫 번째 줄에 배열의 크기인 정수 ()이 주어진다.
두 번째 줄에 배열 ()이 주어진다.
출력
해가 존재하면 첫 번째 줄에 "YES"를, 존재하지 않으면 "NO"를 출력한다.
해가 존재하면 선택한 인덱스 를 이 순서대로 공백으로 구분해 출력한다. 해가 여러 개라면 그중 아무 것이나 출력해도 된다.