42 lines
2.3 KiB
Python
42 lines
2.3 KiB
Python
# Штаты, которые необходимо покрыть
|
||
states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"])
|
||
|
||
# Станции, на которых вещают имеющиеся радиостанции
|
||
stations = {}
|
||
stations["kone"] = set(["id", "nv", "ut"])
|
||
stations["ktwo"] = set(["wa", "id", "mt"])
|
||
stations["kthree"] = set(["or", "nv", "ca"])
|
||
stations["kfour"] = set(["nv", "ut"])
|
||
stations["kfive"] = set(["ca", "az"])
|
||
|
||
# Набор радиостанций, покрывающий все необходимые штаты
|
||
final_stations = set()
|
||
|
||
while states_needed:
|
||
best_station = None
|
||
# Штаты, обслуживаемые этой станцией, которые еще не входят в текущее покрытие
|
||
states_covered = set()
|
||
|
||
# Перебор всех радиостанций и поиск наилучшей из них
|
||
for station, states_for_station in stations.items():
|
||
# Пересечение множеств необходимых к покрытию станций с станциями для
|
||
# итерируемой радиостанции
|
||
covered = states_needed & states_for_station
|
||
|
||
# Если длина множества пересечения больше длины покрытия лучшей текущей станции
|
||
# Иными словами в пересечение входит больше покрываемых штатов, чем для текущей
|
||
# лучшей станции
|
||
if len(covered) > len(states_covered):
|
||
# Назначаем эту станцию лучшей
|
||
best_station = station
|
||
# Переопределяем штаты, покрываемые лучшей на данный момент станцией
|
||
states_covered = covered
|
||
|
||
# После прохождения цикла лучшая станция добавляется в список станций для покрытия
|
||
final_stations.add(best_station)
|
||
|
||
# Необходимо вычесть из нужных для покрытия станций те, которые входят в найденную
|
||
# станцию
|
||
states_needed -= states_covered
|
||
|
||
print(final_stations)
|