Задачка по информатике х2 (с вознаграждением)

superpupervlad

Лучший пользователь 2007 года
Дней с нами
3.036
Розыгрыши
1
Сообщения
614
Репутация
51
Реакции
570
За большую помощь кину сотку на киви

Говно-код который не проходит один тест
Код:
def minus(x,i): #Удаление связей
    del computers[x - i - 1]
    for n in range(2):
        for i in range(len(local)):     #Создание больших множеств Изменение local
            for j in range(len(computers)):
                if len(computers[j] & local[i]) > 0:
                    local[i].update(computers[j])
    print(len(set(map(frozenset, local))),end = ' ')

kol = int(input())            
kol_net = int(input())
computers = []
for i in range(kol_net):        #Добавление связей
    computers.append(set(input()))
razor = int(input())
s_razor = input().split()
local = []
for i in range(1,kol + 1):      #Создание всех возможных множеств  
    local.append(set(str(i)))
for i in range(len(computers)): #Удаление пробелов
    computers[i].discard(' ')
for i in range(razor):          #Удалние связей
    minus(int(s_razor[i]), i)
    local = []
    for i in range(1,kol + 1):      #Создание всех возможных множеств  
        local.append(set(str(i)))
 
Хуясе информатика, у меня в универе и то экзамены легче были)
 
Челик один в потоке учится :D
 
чые за наркомания :eek:
 
1. del computers[x - i - 1]
При удалении провода может быть ошибка. Если удаляемые провода идут в порядке возрастания, то проблем нет. Если же, например, сначала удаляется провод 2, а затем 1, то из computers сначала будет удален провод с номером 1(верно), а затем провод с номером -1(не совсем верно).
2. Подсчет числа локальных сетей, как мне кажется, реализован не совсем правильно. Но я не настолько хорошо разбираюсь в питоне, чтобы об этом судить. Что касается использования наборов символов, то это ввергает меня в глубокую печаль.
 
1. del computers[x - i - 1]
При удалении провода может быть ошибка. Если удаляемые провода идут в порядке возрастания, то проблем нет. Если же, например, сначала удаляется провод 2, а затем 1, то из computers сначала будет удален провод с номером 1(верно), а затем провод с номером -1(не совсем верно).
2. Подсчет числа локальных сетей, как мне кажется, реализован не совсем правильно. Но я не настолько хорошо разбираюсь в питоне, чтобы об этом судить. Что касается использования наборов символов, то это ввергает меня в глубокую печаль.
По условию - "Все номера различны и идут в хронологическом порядке."
В подсчёте я тоже не совсем уверен, но по другому реализовать не могу:(
 
По условию - "Все номера различны и идут в хронологическом порядке."
Хронологически - это значит по времени. Если в тестах они идут в порядке возрастания - все нормально.
В подсчёте я тоже не совсем уверен, но по другому реализовать не могу:(
Насколько я понял, перебираются все провода и все компьютеры, и если компьютер соединяется проводом, то происходит объединение множества компьютера с множеством компьютеров соединяющихся проводом. В конце подсчитывается количество различных таких множеств.
В чем здесь проблема. Если все компьютеры локальной сети соединяются друг с другом, то проблем нет. Если нет, то будет ошибка.
Если перебирать все провода, и объединять множества компьютеров(local) соединяемым проводом, а затем для каждого члена этого множества изменять его множество на получившееся, то после каждой итерации в множестве компьютеров(local) у каждого компьютера будет множество компьютеров, входящих в его локальную сеть.
 
Нашёл код на C++ , но он слишком долго выполняется, а изменить я его не могу т.к. не шарю в C++
 

Вложения

  • 8cf87c97de49c4007f63557e7c3c0329.txt
    1,8 KB · Просмотры: 423
  • f9dd9d8035909370d29bff731bf07ce4.txt
    934 байт · Просмотры: 419
Последнее редактирование:
Попробуй заменить
for n in range(2):
на
for n in range(3):
в своем коде.
И выложи под хайдом тот тест, который не проходит.
 
Попробуй заменить
for n in range(2):
на
for n in range(3):
в своем коде.
И выложи под хайдом тот тест, который не проходит.
Если ты имеешь ввиду Sample Input, то я не могу его просмотреть
 
Ну, и на всякий случай заменить
del computers[x - i - 1]
на
computers[x - 1].clear();