なかなか難しいですね。。。
自分の方針としては、memberに、メンバーシップの有無を0と1で表して、投げ銭分を合計で表して。。。みたいなことを考えたんですが、はじめて登録するメンバーはどうすれば?というところで詰まっちゃいましたね。。。
N = int(input())
members = {}
for _ in range(N):
A = input().split()
if A[1] == "give":
members[A[0]] = (A[2],0)
else:
members[A[0]] = (0,1)
print(members)
回答を見ると、メンバーシップ登録と、PowerChatはわけるということでした。
ただ、それ以外にもちょっと難しいところがあったので一つずつコメントしながら
作成します
N = int(input())
#初期化(スーパーチャットを辞書で、メンバーシップを集合で)
superchat = {}
members = set()
for _ in range(N):
#イベント
event = input().split()
name = event[0]
action = event[1]
if action == "give":
money = int(event[2])
#詰まったところだが、普通に配列のインデックスに名前がないか見ればよかった
if name not in superchat:
superchat[name] =(money,name)
else:
superchat[name] =(superchat[name][0] + money,name)
else:
#集合へ加えるときはadd
members.add(name)
#ラムダ式2列目を中心に降順ソート
for name, money in sorted(superchat.items(), key=lambda x: x[1], reverse=True):
print(name)
for name in sorted(members):
print(name)