Блог пользователя computerbox

Автор computerbox, 6 лет назад, По-русски

Всем привет ! Я решал задачу задачу IOI 1994 Primes https://wcipeg.com/problem/ioi9413 . Задача очень интересная ,но решить ее я не могу . Мое решение работает на несколько миллисекунд больше ,чем надо . Оригинальный тайм лимит 90 секунд , а на сайте 1 секунда . Никак не могу оптимизировать задачу , даже Эратосфен не помогает .Думаю ,что если оптимизировать нахождение простых чисел от 10000 до 99999 то решение должно пройти . А если это никак не возможно ,то как мне решить задачу не слишком сложным алгоритмом ? Пожалуйста помогите мне с данной задачей ,хотя бы дайте наводку! Заранее спасибо ! Мое решение -> https://ideone.com/sDBLJU

  • Проголосовать: нравится
  • +2
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

dmkz можете помочь с данной задачей ?

  • »
    »
    6 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится +11 Проголосовать: не нравится

    Оригинальный тайм лимит 90 секунд , а на сайте 1 секунда

    Необходимо учитывать, что задача 1994 года, тогда контесты писали на утюгах, поэтому TLE 90 секунд.

    Эта задача не такая простая, какой может показаться на первый взгляд. Исследование показало, что есть 757 простых чисел от 10000 до 100000 с суммой 23, причем 101 из них начинаются с цифры 3, поэтому тест 23 3, пожалуй, является худшим для этой задачи.

    Мое решение работает на несколько миллисекунд больше ,чем надо

    Ваше решение работает больше пяти секунд на тесте 23 3

    Я думаю, что нужно перебирать четыре первые строки, а пятую составлять из четырех заполненных цифр в каждом столбце (сумма цифр с вычетом четырех уже известных цифр), а дальше проверять диагонали. Причем нужно предподсчитать таблицу "есть ли число, начинающееся такими то цифрами и имеющее требуемую сумму". Бессмысленно перебирать все числа "влоб", нужно перебирать только нужные, а ненужные отсекать. И нужно потратить O(1) на проверку при помощи предподсчета всех таблиц.

    Если не зайдет, можно попробовать сохранить все квадраты для худших случаев, если их немного, и вставить в исходный код программы. Обычно так делают на олимпиадах: пишут перебор, который работает минут 10, сохраняя в текстовые файлы ответы, затем копируют в программу и отправляют на сервер. А пока перебор работает, пишется / читается другая задача.

    • »
      »
      »
      6 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Спасибо большое за помощь dmkz! Вот я реализовал идею предложенную вами,но проходит всего первый сабтаск. Сейчас посмотрю разбор той задачи ,которой вы послали . Надеюсь cмогу что-то полезное для себя взять .

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Возможно, Вам может помочь решение задачи 611. "Словарные квадраты" с acmp.ru. Там необходимо перебрать квадраты 10 × 10 такие, чтобы каждая строка и каждый столбец составляли английское слово. Федор Владимирович mfv Меньшиков проводил разбор этой задачи