문제 3843 · 바이트 IV
게임 서버의 검증된 누적 점수
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
게임 서버의 보안 담당자는 점수 수집 장치가 남긴 패킷을 검사하고 있다. 장치는 한 번에 한 플레이어의 추가 점수를 보내며, 전송 중 내용이 바뀌었는지 확인할 수 있도록 검사 바이트를 함께 기록한다. 담당자는 검사를 통과한 패킷만 이용해 플레이어별 누적 점수를 작성하려 한다. 각 패킷에는 플레이어 번호 P, 네 자리의 16진수 문자열 H, 두 자리의 16진수 문자열 C가 들어 있다. 16진수 문자는 0부터 9와 대문자 A부터 F만 사용한다. H의 앞 두 자리를 해석한 정수를 A, 뒤 두 자리를 해석한 정수를 B라고 한다. 예를 들어 H가 01AF이면 A는 1이고 B는 175다. 패킷에 담긴 추가 점수는 256×A+B다. 맨 앞에 있는 0도 문자열의 일부이므로 생략하지 않는다. 서버가 계산하는 검사 바이트는 A, B, P를 256으로 나눈 나머지에 비트 단위 배타적 논리합을 차례로 적용한 값이다. 배타적 논리합은 각 이진수 자리에서 서로 다른 비트끼리 만나면 1, 같은 비트끼리 만나면 0이 되는 연산이다. 계산한 값과 C를 16진수로 해석한 정수가 같을 때만 그 패킷이 유효하다. 다르면 해당 패킷의 점수는 전부 버린다. 같은 플레이어의 패킷이 여러 번 등장하면 유효한 패킷의 점수를 모두 더한다. 내용이 완전히 같은 패킷도 서로 다른 전송 기록이므로 각각 더한다. 유효한 패킷의 점수가 0이어도 그 플레이어는 결과에 포함한다. 유효하지 않은 패킷만 보낸 플레이어는 결과에서 제외한다. 입력된 모든 패킷을 검사한 뒤 결과에 포함되는 플레이어 수와 각 플레이어의 누적 점수를 플레이어 번호가 작은 순서대로 출력하는 프로그램을 작성한다.
입력
첫째 줄에 패킷 수 N이 주어진다. N은 1 이상 20,000 이하의 정수다. 다음 N개 줄에 P H C가 공백으로 구분되어 주어진다. P는 1 이상 9,999 이하의 정수다. H는 정확히 네 자리, C는 정확히 두 자리의 16진수 문자열이다. 모든 16진수 문자는 0~9 또는 A~F다.
출력
첫째 줄에 유효한 패킷이 하나 이상 있는 플레이어 수 K를 출력한다. 다음 K개 줄에 플레이어 번호와 누적 점수를 공백으로 구분하여 플레이어 번호의 오름차순으로 출력한다. 점수는 10진수 정수로 출력한다. K가 0이면 첫째 줄의 0만 출력한다.
예제 입력 1
5 2 0102 01 1 000A 0B 2 0003 01 3 0000 03 1 0005 00
예제 출력 1
3 1 10 2 261 3 0
예제 입력 2
2 1 FFFF 00 2 0000 00
예제 출력 2
0
힌트 펼치기
- 검사 바이트와 추가 점수는 서로 다른 방식으로 계산한다.
- 유효한 패킷의 점수를 플레이어 번호별로 모은 뒤 번호를 정렬한다.
알고리즘 분류
문자열해시정렬풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |