天下一2013予選B B - 天下一後入れ先出しデータ構造
問題原文
解法
まともにデータを持っては間に合わないので、 (数字, 個数)
というように持つ。
スタックの要素数は、↑の形式で持っても毎回舐めると間に合わないので、変数で管理するようにする。
↓のちょっとめんどくさいバージョンという感じ。
at274.hatenablog.com
実装
Q, L = map(int, input().split()) stack = [] stack_size = 0 for q in range(Q): query = list(input().split()) if query[0] == 'Push': n, m = int(query[1]), int(query[2]) stack_size += n if stack_size > L: print('FULL') exit() stack.append([m, n]) elif query[0] == 'Pop': n = int(query[1]) stack_size -= n if stack_size < 0: print('EMPTY') exit() while n: if n >= stack[-1][1]: n -= stack[-1][1] stack.pop() else: stack[-1][1] -= n n = 0 elif query[0] == 'Top': if stack_size == 0: print('EMPTY') exit() print(stack[-1][0]) elif query[0] == 'Size': print(stack_size) print('SAFE')
感想
今なら茶diffがつきそうな気がする。