Помогите решить олимпиаду по ИВТ

Тема в разделе "Python", создана пользователем # Z #, 21 дек 2018.

  1. # Z #

    # Z # New Member

    Задачи:
    A. Спецэффекты

    Буду очень благодарен соточкой на киви)
     
  2. NoSecret

    NoSecret New Member

    Нема... честно, помог бы. Но не шарю.)
     
  3. metro

    metro New Member

    Я просто подскажу, на мобиле не буду код писать да и лень)))))):
    1) Я так понял тут N2+N+1 N2 это N в квадрате. Составь прогрессию. 32 бита это от -2147483648 до 2147483647, как станет больше 2147483647 то номер члена в прогрессии будет ответ (надеюсь знаешь почему).
    2) Сортировал массивы? Почти тоже самое берешь первый член первого массива и поочередно сравниваешь с членами второго массива, если удовлетворяет условию, то увеличиваешь переменную (которая обозначает число пар и в начале =0 ) на единицу, затем берешь следующий член из первого массива и так же сравниваешь со всеми членами второго. Думаю через цикл for напишешь. Ну конечно еще в общий цикл все, который регулируется числом тестовых примеров (я люблю циклы, потому так предлагаю).
    3) Та же работа с массивами. Основной - время отправки, его сортируешь по возрастающей и начинаешь работать поочередно с каждым членом. Дальше логика заражения. Чтобы не запутаться для компов принимающих и отправляющих делай двумерный массив, вторая часть которого будет иметь нули, но при заражении меняться на единицу. В конце посчитай число единиц или сразу инкрементируй переменную (которая будет числом зараженных).
    4) Я не совсем догнал суть задания, но берешь число, переводишь в строку и разбиваешь на символы, переставляешь символы, создаешь строку и преобразуешь в число (проверку try catch можно и не делать), проводишь с новым числом необходимую операцию.
    5) Определяем четное или не четное число массива, при четном слева будем идти до (длина/2 -1), при нечетном до (длина/2-2) справа аналогично. Теперь сравниваем крайние числа, совпадают - идем дальше, если не совпадают, то идем дальше но цифры на этом шаге сравниваем с предыдущего шага и (а) если нынешний шаг справа совпадает с предыдущим слева, то вставить нужно предыдущее слева значение в ячейку под номером (текущая справа -2 - это и будет первая цифра ответа, а вторая соответственно само значение), сместить соответственно весь массив на одну ячейку. (б) если нет совпадений как в пишем ответ, что одного значения недостаточно. (г) продолжение пункта (а), проверяем дальше и если остальные совпадают, то норм ответ, если опять нестыковка, то ответ что недостаточно одного замещения. Отдельный частный случай: если с самого начала не совпадает, то работаем как дальше но только перескакиваем на одну позицию с края массива, как определяли в (а) и сравниваем дальше, если все совпадает, то добавляешь несовпавшее число в начало или конец массива (на предыдущем шаге определили где), а если повторяется еще одно несовпадение, то пишем ответ нет.
    З.Ы.
    После написания по моему объяснению станет очевидно где можно упростить код. Я знаю java но в списке его нет, а с методами других языков я не знаком, поэтому и расписывал в таком стиле.
    З.Ы.Ы.
    Не сложные задачки для олимпиады, только последняя, но там главное не запутаться и не более. А если ты хотел не логику, а сам код, то, ИМХО, не нужна тебе та олимпиада...
     

Поделиться этой страницей