63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
# KCPC
|
|
|
|
import sys
|
|
|
|
input = sys.stdin.readline
|
|
|
|
|
|
def write_board(board, i, j, s, idx):
|
|
if not board.get(i, 0):
|
|
board[i] = {"problems": {}, "submit_count": 0, "last_submit": -1}
|
|
|
|
board[i]["problems"][j] = max(board[i]["problems"].get(j, 0), s)
|
|
board[i]["submit_count"] += 1
|
|
board[i]["last_submit"] = idx
|
|
|
|
return
|
|
|
|
def check_our_rank(board, t):
|
|
ranking = []
|
|
for k in board:
|
|
info = (k, -sum(board[k]["problems"].values()), board[k]["submit_count"], board[k]["last_submit"])
|
|
ranking.append(info)
|
|
|
|
ranking.sort(key=lambda x: (x[1], x[2], x[3]))
|
|
|
|
for i, record in enumerate(ranking):
|
|
if record[0] == t:
|
|
return i+1
|
|
|
|
def test(n ,k ,t, m):
|
|
board = {} # 팀id: {문제: {번호: 점수}, 제출 횟수: ~, 마지막 제출 인덱스: ~}
|
|
for idx in range(m):
|
|
i, j, s = map(int, input().rstrip().split())
|
|
write_board(board, i, j, s, idx)
|
|
|
|
return check_our_rank(board, t)
|
|
|
|
|
|
|
|
def solution():
|
|
T = int(input().rstrip())
|
|
for _ in range(T):
|
|
n, k, t, m = map(int, input().rstrip().split())
|
|
print(test(n, k, t, m))
|
|
|
|
return
|
|
|
|
|
|
solution()
|
|
|
|
"""
|
|
걸린 시간: 40분
|
|
|
|
시간 복잡도: write_board가 O(1), check_our_rank가 sort때문에 O(nlogn)이므로, 이 둘을 활용한 test는 O(nlogn)이다.
|
|
따라서 전체 시간복잡도는 test하는 횟수를 곱해서 O(Tnlogn)이다.
|
|
|
|
해설: 문제에서 시키는대로 구현하면 된다. 순위를 정하기 위해 마지막에 정렬해야 하는데 기준이 되는 요소들이
|
|
최종 점수 > 제출 횟수 > 마지막 제출 시간이기 때문에 이 정보들을 dict에 기록하면서 진행하기로 했다.
|
|
최종 점수를 계속 갱신하는 것이 신경쓸 것이 좀 있어서 마지막에 한번에 모아서 계산하는거랑 그때그때 갱신하는 거랑 시간복잡도는 같다고
|
|
판단하여 마지막에 계산하였다.
|
|
그 후 팀 id와 3가지 요소를 튜플로 묶어서 리스트에 넣은 다음 lambda를 활용하여 sort 하였다.
|
|
동순위는 없으므로 팀 id가 t인 튜플의 인덱스+1을 한 것이 답이다.
|
|
""" |