コンテストの制限時間が終了しました。
以降も提出を行うことができますが、順位集計には反映されません。
以降も提出を行うことができますが、順位集計には反映されません。
ソースコード
--まずは誤回答
WITH panelty AS
(
SELECT
a.ENTRY_ID,
COUNT(a.SUBMIT_ID) AS wrong_ans
FROM
SUBMISSIONS AS a
--最後のACの時間をINNERJOINすることで、最後のACより前のWAの回数をカウントできる。
INNER JOIN
(
SELECT
ENTRY_ID,
--問題IDで紐づけないと、どの問題かわからなくなる
PROBLEM_ID,
MAX(SUBMITTED_AT) AS LAST_SUBMITTED_AT
FROM
SUBMISSIONS
WHERE
CONTEST_ID = 2
AND
STATUS = 'AC'
AND
ENTRY_ID IS NOT NULL
GROUP BY
ENTRY_ID,PROBLEM_ID
) AS b
ON
a.ENTRY_ID = b.ENTRY_ID
AND
a.PROBLEM_ID = b.PROBLEM_ID
AND
a.SUBMITTED_AT < b.LAST_SUBMITTED_AT
GROUP BY
a.ENTRY_ID
),
--点数と回答時間
main AS
(
SELECT
ENTRY_ID,
SUM(POINT) AS POINT,
MAX(SUBMITTED_AT) AS LAST_SUBMITTED_AT
FROM
SUBMISSIONS
WHERE
STATUS = 'AC'
AND ENTRY_ID IS NOT NULL
AND CONTEST_ID = 2
GROUP BY
ENTRY_ID
)
SELECT
RANK()OVER(ORDER BY POINT DESC,
strftime('%s',LAST_SUBMITTED_AT) - strftime('%s',STARTED_AT) + IFNULL(wrong_ans,0)*300 ASC
) AS RANK,
--時刻
ENTRIES.USER_ID AS USER_ID,
POINT,
strftime('%s',LAST_SUBMITTED_AT) - strftime('%s',STARTED_AT) + IFNULL(wrong_ans,0)*300 AS EX_TIME,
IFNULL(wrong_ans,0) AS WRONG_ANS
FROM
ENTRIES
LEFT JOIN
panelty
USING
(ENTRY_ID)
INNER JOIN
main
USING
(ENTRY_ID)
WHERE
ENTRIES.CONTEST_ID = 2
ORDER BY
RANK,WRONG_ANS,USER_ID
提出情報
提出日時 | 2024/02/06 14:41:57 |
コンテスト | 第3回 SQLコンテスト |
問題 | 順位計算 |
受験者 | romi0416 |
状態 (詳細) | AC (Accepted: 正答) |
メモリ使用量 | 86 MB |
メッセージ
テストケース(通過数/総数)
2/2
状態
メモリ使用量
データパターン1
AC
85 MB
データパターン2
AC
86 MB