BOJ의 대회는 두 종류로 나눌 수 있다.
BOJ의 문제는 두 종류로 나눌 수 있다.
대회는 다음과 같은 값을 가진다.
yyyy-MM-dd HH:mm:ss 형식이다.대회에 포함된 문제는 3가지 값을 가진다.
일반 대회의 경우
이고
점수 대회의 경우
이다. 점수 대회의 경우 0점이 아니면 맞은 문제이다.
점수 문제에서 "성공"과 "부분 성공"의 기준과 대회에서 사용하는 문제의 "성공"과 "부분 성공"의 기준은 다르다. 대회에서는 문제의 배점과 획득한 점수가 같아야 "성공"이다. 따라서, 제출 결과가 "성공"이지만, 대회 결과에서는 "부분 성공"이 나올 수 있다.
제출은 다음과 같은 값을 가진다.
[A-Za-z0-9_]{1,20}을 만족한다.yyyy-MM-dd HH:mm:ss 형식이다.유저 u와 문제 p 사이에서 좋은 제출을 정의할 수 있다. 유저 u가 문제 p를 맞은 적이 없으면 좋은 제출은 없고, 대회별로 다음과 같이 정의한다.
유저 u가 문제 p에서 획득한 페널티는 "페널티 1"과 "페널티 2"로 두 종류가 있으며 다음과 같이 정의한다.페널티"는 "페널티 1"과 "페널티 2"를 더한 값이다. 단, "마지막 페널티"를 사용하는 경우 "페널티"는 "페널티 2"와 같은 값이다.
페널티 1
페널티 2
유저 u와 문제 p 사이에서 시도한 횟수를 정의할 수 있다. 시도한 횟수는 문제 p의 좋은 제출보다 제출 번호가 작거나 같은 제출의 수이다. 좋은 제출이 없으면 문제 p에 제출한 제출의 수와 같다.
유저 u의 페널티는 대회의 "마지막 페널티" 값에 따라서 다르게 계산한다.
스코어보드에서 유저의 순서는 다음과 같은 조건으로 정렬되어 있다.
마지막으로 맞은 제출 번호 또는 제출한 제출 번호가 없는 경우에는 제출 번호를 0으로 가정한다.
유저 u의 등수는 위의 조건 중 1번과 2번만 사용했을 때, 자신보다 순서가 앞서는 사람의 수 + 1이다.
첫째 줄에 대회의 정보 penalty, start, last, ce, cscore, format이 주어진다.
둘째 줄에 대회에 포함된 문제의 수 N (1 ≤ N ≤ 26)이 주어진다.
셋째 줄부터 N개의 줄에 대회 문제의 값 id, order, pscore가 한 줄에 하나씩 주어진다.
다음 줄에는 대회에 참가한 유저의 수 M (1 ≤ M ≤ 1,000)이 주어지고, 그 다음 줄에 대회에 참가한 유저의 아이디가 주어진다.
그 다음 줄에는 이 대회에 제출된 제출의 수 S (1 ≤ S ≤ 1,000,000)가 주어진다.
다음 S개의 줄에 제출의 정보 sid, pid, uid, result, presult, score, date가 한 줄에 하나씩 주어진다. 제출은 제출 번호가 증가하는 순이다.
대회에 참가한 유저의 아이디에 포함되지 않은 유저의 제출도 주어질 수 있다. 이 경우에는 그 유저의 모든 제출을 무시한다.
총 M개의 줄을 출력해야 한다. 우선 순위가 높은 사람부터 낮은 사람까지 다음 정보를 한 줄에 하나씩 ,로 구분해 출력해야 한다.
유저의 등수
유저의 아이디
유저 u의 문제 p에 대한 결과, 문제는 대회 문제의 값 order의 오름차순으로 출력해야 한다.
일반 대회
a/시도한 횟수/획득한 페널티"w/시도한 횟수/--"0/--"점수 대회
성공 여부/좋은 제출의 점수/시도한 횟수/획득한 페널티"
a, 아니면 p이다.w/시도한 횟수/--"0/--"유저의 최종 정보 "획득한 점수/유저의 페널티"
입력으로 주어지는 모든 수는 정수이다.
스코어보드를 HTML 표로 생성하는 BOJ의 소스 코드를 이용해서 이 문제의 데이터를 만들었다.