結果
| 問題 |
No.449 ゆきこーだーの雨と雪 (4)
|
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-26 15:49:53 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,844 bytes |
| コンパイル時間 | 157 ms |
| コンパイル使用メモリ | 82,836 KB |
| 実行使用メモリ | 115,668 KB |
| 最終ジャッジ日時 | 2025-03-26 15:50:54 |
| 合計ジャッジ時間 | 34,977 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 1 WA * 42 |
ソースコード
import bisect
def main():
import sys
input = sys.stdin.read
data = input().split()
idx = 0
n = int(data[idx])
idx += 1
L = list(map(int, data[idx:idx+n]))
idx += n
problem_level = {}
for i in range(n):
problem = chr(ord('A') + i)
problem_level[problem] = L[i]
T = int(data[idx])
idx += 1
users = {} # Maps username to (sum_L, k, current_key)
sorted_keys = []
output = []
for _ in range(T):
name = data[idx]
p = data[idx+1]
idx += 2
if p != '?':
# Handle solve submission
level = problem_level[p]
if name not in users:
sum_L = level
k = 1
sp = k * (k + 1) // 2
score = sum_L * 100 - sp
key = (-score, sp, name)
bisect.insort(sorted_keys, key)
users[name] = (sum_L, k, key)
else:
old_sum_L, old_k, old_key = users[name]
# Remove old key
pos = bisect.bisect_left(sorted_keys, old_key)
if pos < len(sorted_keys) and sorted_keys[pos] == old_key:
sorted_keys.pop(pos)
# Update user
sum_L = old_sum_L + level
k = old_k + 1
sp = k * (k + 1) // 2
score = sum_L * 100 - sp
new_key = (-score, sp, name)
bisect.insort(sorted_keys, new_key)
users[name] = (sum_L, k, new_key)
else:
# Handle query
sum_L, k, current_key = users[name]
# Find the rank
rank = bisect.bisect_left(sorted_keys, current_key) + 1
output.append(str(rank))
print('\n'.join(output))
if __name__ == "__main__":
main()
lam6er