помогите найти наибольшие элементы словаря
Рассмотрим правила игры в Шкатулки. Имеется N шкатулок, пронумерованных числами от 1 до N и содержащих ровно по одному желудю. Над шкатулками возможны три операции:
+ А В – данная команда означает сложить все желуди из шкатулки с номером В в шкатулку с номером А. В результате шкатулка с номером В будет пустой, а шкатулка с номером А будет содержать суммарное количество желудей из шкатулок А и В.
/ А В - данная команда означает поделить все желуди из шкатулки с номером В между шкатулками с номерами А и В. В результате шкатулка с номером В получит половину своего содержимого (меньшую, при нечетном количестве желудей), а шкатулка с номером А будет содержать суммарное количество желудей, которое в ней было, и половину желудей из шкатулки В (большую, при нечетном количестве).
* А В – данная команда означает обменять содержимое шкатулок с номерами А и В. В результате содержимое шкатулки с номером В переместится в шкатулку с номером А, а содержимое шкатулки с номером А переместится в шкатулку с номером В.
Формат ввода Первая строка файла содержит два числа N – количество шкатулок и К – количество команд, перемещающих желуди между шкатулками. Далее следует К строк, каждая состоит из одного символа (‘+’, ‘/’, ‘*’) и двух чисел (каждое от 1 до N). Все параметры разделены одним пробелом.
Формат вывода В первой строке выведите количество шкатулок, содержащих наибольшее количество желудей. Во второй строке выведите в порядке возрастания номера шкатулок, содержащих наибольшее количество желудей. '''
import math
n, i = map(int, input().split(" "))
keys = list(range(1, n+1))
value = [1] * n
dict_1 = dict(zip(keys, value))
for i in range(i):
operation, a, b = map(str, input().split(' '))
if operation == '+':
dict_1[int(b)] = dict_1[int(b)] - 1
dict_1[int(a)] = dict_1[int(a)] + 1
elif operation == '*':
x = dict_1[int(b)]
y = dict_1[int(a)]
dict_1[int(b)] = y
dict_1[int(a)] = x
elif operation == '/':
z = dict_1[int(b)]/2
dict_1[int(a)] = dict_1[int(a)] + math.ceil(z)
dict_1[int(b)] = int(z)
print(1)
Keymax = max(dict_1, key=dict_1.get)
print(Keymax)
'''
Ответы (2 шт):
Словари в данной задаче ни к чему, достаточно простого списка длиной n+1. Операция + реализована неверно, нужно переносить все жёлуди. Переменная i используется неаккуратненько.
n, k = map(int, input().split(" "))
L = [1] * (n+1)
for i in range(k):
operation, a, b = map(str, input().split(' '))
a = int(a)
b = int(b)
if operation == '+':
L[a] += L[b]
L[b] = 0
elif operation == '*':
L[a], L[b] = L[b], L[a]
elif operation == '/':
lob = L[b]//2
L[a] += L[b] - lob
L[b] = lob
mx = max(L)
for i, x in enumerate(L):
if x == mx:
print(i, end = " ")
если по существу вопроса (найти наибольшие элементы словаря) то попробуйте так:
m = max(dict_1.values()) # максимальное значение
keymax = dict(filter(lambda x: x[1]==m, dict_1.items())) # элементы с максимальным значением