Всем привет ! Я решал задачу задачу IOI 1994 Primes https://wcipeg.com/problem/ioi9413 . Задача очень интересная ,но решить ее я не могу . Мое решение работает на несколько миллисекунд больше ,чем надо . Оригинальный тайм лимит 90 секунд , а на сайте 1 секунда . Никак не могу оптимизировать задачу , даже Эратосфен не помогает .Думаю ,что если оптимизировать нахождение простых чисел от 10000 до 99999 то решение должно пройти . А если это никак не возможно ,то как мне решить задачу не слишком сложным алгоритмом ? Пожалуйста помогите мне с данной задачей ,хотя бы дайте наводку! Заранее спасибо ! Мое решение -> https://ideone.com/sDBLJU
dmkz можете помочь с данной задачей ?
Необходимо учитывать, что задача 1994 года, тогда контесты писали на утюгах, поэтому TLE 90 секунд.
Эта задача не такая простая, какой может показаться на первый взгляд. Исследование показало, что есть 757 простых чисел от 10000 до 100000 с суммой 23, причем 101 из них начинаются с цифры 3, поэтому тест
23 3
, пожалуй, является худшим для этой задачи.Ваше решение работает больше пяти секунд на тесте
23 3
Я думаю, что нужно перебирать четыре первые строки, а пятую составлять из четырех заполненных цифр в каждом столбце (сумма цифр с вычетом четырех уже известных цифр), а дальше проверять диагонали. Причем нужно предподсчитать таблицу "есть ли число, начинающееся такими то цифрами и имеющее требуемую сумму". Бессмысленно перебирать все числа "влоб", нужно перебирать только нужные, а ненужные отсекать. И нужно потратить O(1) на проверку при помощи предподсчета всех таблиц.
Если не зайдет, можно попробовать сохранить все квадраты для худших случаев, если их немного, и вставить в исходный код программы. Обычно так делают на олимпиадах: пишут перебор, который работает минут 10, сохраняя в текстовые файлы ответы, затем копируют в программу и отправляют на сервер. А пока перебор работает, пишется / читается другая задача.
Спасибо большое за помощь dmkz! Вот я реализовал идею предложенную вами,но проходит всего первый сабтаск. Сейчас посмотрю разбор той задачи ,которой вы послали . Надеюсь cмогу что-то полезное для себя взять .
Возможно, Вам может помочь решение задачи 611. "Словарные квадраты" с acmp.ru. Там необходимо перебрать квадраты 10 × 10 такие, чтобы каждая строка и каждый столбец составляли английское слово. Федор Владимирович mfv Меньшиков проводил разбор этой задачи