세 변수에 대한 N개의 일차부등식을 모두 만족하면서 원점에 가장 가까운 유리수 점 (X, Y, Z)을 구하고, 해가 없으면 banana를 출력한다.
어려움8기하수학이분 탐색아직 제출이 없습니다시간 제한1초메모리 제한128 MB비밀 조직 K는 세상의 어떤 컴퓨터에도 침투할 수 있을 만큼 강력한 컴퓨터 바이러스를 최근에 만들었다. 조직은 바이러스를 메모리 카드에 담아 금고에 넣었고, 이 금고는 세 실수 X, Y, Z로 이루어진 조합으로 열린다. 조합이 하나뿐인 것은 아니다. 바이러스가 매우 위험하므로 조직 K는 모든 비밀 요원이 조합을 알게 두고 싶지 않았다. 그래서 어떤 요원도 혼자서는 금고를 열 수 없고 다른 모든 요원의 정보를 모아야만 열 수 있도록 요원마다 정보를 일부씩 나누어 주었다. 각 정보는 네 정수 A, B, C, D로 이루어져 있으며, 금고의 조합이 다음 부등식을 만족한다는 뜻이다.
A⋅X+B⋅Y+C⋅Z≤D
미르코는 조직 K가 이 바이러스로 자기가 좋아하는 컴퓨터 게임의 서버를 망가뜨릴까 봐 걱정한다. 미르코는 이 게임에서 이웃 슬라브코와 함께 닭을 키우고 당근을 심는다. 미르코는 조직 K의 모든 비밀 요원에게서 정보를 훔쳤고, 금고를 열어 바이러스를 없애려 한다. 그런데 문제가 생겼다. 미르코는 부등식 목록에서 금고의 조합을 만들어 내는 방법을 모른다.
미르코를 도와 모든 부등식을 만족하는 조합 (X,Y,Z)를 찾아라. 조합이 여러 개라면 원점에 가장 가까운 조합, 즉 X2+Y2+Z2가 가장 작은 조합을 찾아야 한다. 모든 부등식을 만족하는 점의 집합은 닫힌 볼록 집합이므로, 조합이 하나라도 있으면 이런 조합은 정확히 하나 있다.
첫째 줄에 요원의 수 N이 주어진다. (1≤N≤100)
다음 N개의 줄에는 각각 네 정수 Ai, Bi, Ci, Di가 주어진다. (−1000≤Ai,Bi,Ci,Di≤1000)
모든 i (1≤i≤N)에 대해 Ai⋅X+Bi⋅Y+Ci⋅Z≤Di를 만족하는 실수 조합 가운데 X2+Y2+Z2가 가장 작은 조합 (X,Y,Z)를 첫째 줄에 공백으로 구분해 출력한다.
이 조합의 좌표는 항상 유리수이며, 각 좌표를 기약분수로 정확히 출력해야 한다. 좌표가 정수이면 그 정수만 출력한다 (예: 0, -5). 정수가 아니면 p/q 꼴로 출력한다. 이때 q≥2이고, p와 q는 서로소이며, 음수의 부호는 p 앞에 붙인다 (예: -3/5).
모든 부등식을 만족하는 조합이 없으면 banana를 출력한다.
첫 번째 예제에서 금고의 조합에 대해 알려진 정보는 다음과 같다.
X+Y≤4
Y+2Z≤−3
X≤2
−X≤−1
예를 들어 (1.5,2,−5)도 모든 부등식을 만족한다. 하지만 원점에 가장 가까운 조합은 (1,−53,−56)이고, 이때 X2+Y2+Z2=514이다. 따라서 1 -3/5 -6/5를 출력한다.