아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

최소 곱

시간 제한2초메모리 제한512 MB

요약
의사난수로 배열을 생성한 뒤 i<j이고 a_i<a_j인 두 원소의 곱이 최소가 되는 쌍을 찾고, 없으면 IMPOSSIBLE을 출력한다.
난이도

보통10점 중 6점

유형
구현, 그리디, 수학, 배열
정답자
아직 제출이 없습니다

문제

정수 배열 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. i<ji < j이고 ai<aja_i < a_j이며 곱 ai⋅aja_i \cdot a_j가 가능한 한 작아지는 두 인덱스 ii와 jj를 찾아라.

입력

입력은 여러 개의 테스트로 이루어진다. 첫째 줄에 테스트의 수 tt가 주어진다 (1≤t≤1041 \leq t \leq 10^4). 다음 tt개의 줄에 각각 하나의 테스트가 주어진다.

각 테스트는 다음과 같은 알고리즘으로 생성된다. 테스트는 정수 nn, ll, rr, xx, yy, zz, b1b_1, b2b_2로 주어진다 (2≤n≤1072 \leq n \leq 10^7, −2⋅109≤l≤r≤2⋅109-2\cdot10^9 \leq l \leq r \leq 2\cdot10^9, 0≤x,y,z,b1,b2<2320 \leq x, y, z, b_1, b_2 < 2^{32}). nn은 배열의 길이이다.

먼저 길이 nn인 수열 bib_i를 생성한다. b1b_1과 b2b_2는 주어진다. i>2i > 2인 경우 bi=(bi−2x+bi−1y+z) mod 232b_i = (b_{i-2}x + b_{i-1}y + z) \bmod 2^{32}이다. 11부터 nn까지의 각 ii에 대해 ai=(bi mod (r−l+1))+la_i = (b_i \bmod (r - l + 1)) + l이다. 따라서 −2⋅109≤ai≤2⋅109-2\cdot10^9 \leq a_i \leq 2\cdot10^9이다.

정수 오버플로를 피하려면 수열을 생성할 때 64비트 정수를 사용하는 것이 좋다.

모든 테스트에서 nn의 합은 2⋅1072 \cdot 10^7을 넘지 않는다.

출력

각 테스트마다 가능한 가장 작은 곱 ai⋅aja_i \cdot a_j를 한 줄에 하나씩 출력한다. i<ji < j이고 ai<aja_i < a_j인 ii와 jj가 존재하지 않으면 "IMPOSSIBLE"을 출력한다.

힌트

첫 번째 테스트에서 배열이 생성되는 과정을 살펴보자.

먼저 수열 bb를 생성한다.

  • b1=0b_1 = 0
  • b2=3b_2 = 3
  • b3=(11⋅0+13⋅3+17) mod 232=56b_3 = (11\cdot 0 + 13\cdot 3 + 17) \bmod 2^{32} = 56
  • b4=(11⋅3+13⋅56+17) mod 232=778b_4 = (11\cdot 3 + 13\cdot 56 + 17) \bmod 2^{32} = 778

이어서 이 수열로 aa를 생성한다.

  • a1=(0 mod (5−(−5)+1))+(−5)=(0 mod 11)−5=−5a_1 = (0 \bmod (5 - (-5) + 1)) + (-5) = (0 \bmod 11) - 5 = -5
  • a2=(3 mod 11)−5=−2a_2 = (3 \bmod 11) - 5 = -2
  • a3=(56 mod 11)−5=−4a_3 = (56 \bmod 11) - 5 = -4
  • a4=(778 mod 11)−5=3a_4 = (778 \bmod 11) - 5 = 3

따라서 a=[−5,−2,−4,3]a = [-5, -2, -4, 3]이다. 답은 −5⋅3=−15-5 \cdot 3 = -15이다.

두 번째 테스트에서 배열은 [42,42,42,42,42][42, 42, 42, 42, 42]이다.

예제1

  1. 예제 1

    입력
    2
    4 -5 5 11 13 17 0 3
    5 0 100 0 1 0 42 42
    
    예상 출력
    -15
    IMPOSSIBLE