행성계 만들기
시간 제한1초메모리 제한256 MB
감싸는 3차원 격자를 이동하는 소행성들이 같은 칸에서 합쳐지는 과정을 충돌이 멈출 때까지 계산하고 최종 행성을 출력합니다.
문제
마스 교수는 행성이 만들어지는 과정을 손으로 시뮬레이션한다. 이 시뮬레이션을 프로그램으로 옮겨 달라는 부탁을 받았다.
시뮬레이션은 작은 미행성이 서로 충돌해 큰 행성이 되는 과정을 다룬다. 공간은 크기의 정육면체 격자로 나뉘고, 각 칸에는 미행성이 최대 하나만 들어간다. 미행성마다 질량 , 처음 위치 , 속도 가 주어진다. 속도는 1초 동안 각 축 방향으로 지나가는 칸 수다. 예를 들어 위치가 이고 속도가 인 미행성은 1초 뒤에 , 2초 뒤에 에 있다.
경로는 모든 축에서 순환한다. 위 미행성이 공간에 있다면 그다음 두 위치는 과 다. 칸 번호는 0부터 시작한다.
미행성 둘 이상이 같은 칸에 모이면 하나로 합쳐진다. 합쳐진 미행성의 질량은 모인 질량의 합이다. 속도는 축마다 모인 속도의 합을 모인 개수로 나눈 뒤 0 방향으로 버린 값이다. 질량 12에 속도가 인 미행성과 질량 10에 속도가 인 미행성이 합쳐지면 질량은 22, 속도는 이 된다.
충돌은 정수 시각에만 일어난다고 본다. 더 이상 충돌이 일어날 수 없게 되면 남은 미행성을 행성으로 본다.
입력
첫 줄에 양의 정수 네 개 , , , 가 주어진다. 은 미행성의 개수로 이고, , , 는 공간의 각 축 크기로 모두 1000 이하다.
다음 개 줄에는 미행성 하나의 정보가 형식으로 주어진다. 시각 에서의 질량, 위치, 속도이며 , , , , 이다. 처음 위치가 같은 미행성은 없다.
출력
첫 줄에 더 이상 충돌이 일어날 수 없을 때 남아 있는 행성의 개수 를 출력한다. 이어서 개 줄에 행성을 하나씩 Pi: m x y z vx vy vz 형식으로 출력한다. Pi는 번호 를 붙인 식별자로 첫 줄은 P0:으로 시작하고 는 부터 까지다. 그 뒤는 그 행성의 질량, 위치, 속도다.
위치와 속도는 마지막 충돌이 일어난 시각을 기준으로 한다. 충돌이 한 번도 일어나지 않으면 시각 을 기준으로 한다.
행성은 질량이 큰 것부터 출력한다. 질량이 같으면 위치 의 사전순으로 놓으며 가 작은 것이 앞에 온다.