|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.10.2012, 22:17 | #1 |
Ученик в c++
Форумчанин
Регистрация: 28.02.2011
Сообщений: 162
|
Задача "Лампочки" на Pascal (№337 с acmp.ru)
Здравствуйте! Вот решил взяться за сложную задачку "Лампочки", и у меня неплохо получилось к моему удивлению
Моя программа, которую я писал минут 20, не проходит тест №6 с ошибкой Runtime error. Есть кто решал эту задачу? Можете подсказать хотя бы примерно, что в этом 6-ом тесте? Вот моя программа: Код:
Последний раз редактировалось Ghost3; 30.10.2012 в 22:20. |
30.10.2012, 23:38 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Йолки. Пусть N=10^9. И вот Вы, такой красивый, обращаетесь в первом же цикле к a[10000], a[20000], a[20001]... дальше объяснять?
|
31.10.2012, 11:24 | #3 |
Ученик в c++
Форумчанин
Регистрация: 28.02.2011
Сообщений: 162
|
Угу, только как записать-то?
Код:
Хотя можно как-нибудь умудрится разбить a на несколько массивов... |
31.10.2012, 11:29 | #4 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Правильный ответ: не надо хранить состояния всех лампочек.
Алгоритм O(N) по времени и O(P) по памяти пишется достаточно легко, но что-то мне подсказывает, что он не пройдёт по времени. А вот быстрее чем O(N) - это надо очень сильно думать, задачу простой никак не назовёшь. |
31.10.2012, 11:35 | #5 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Заменить массив списком например) Только тогда есть риск попасть на OutOfAMemory)
Попробуйте подойти к задаче несколько иначе: не писать в массив состояния всех лампочек, а только номера загоревшихся. Псевдокод: Код:
Благодарить в репутацию. Проклинать — туда же
|
31.10.2012, 11:36 | #6 |
Ученик в c++
Форумчанин
Регистрация: 28.02.2011
Сообщений: 162
|
Там время 2 секунды, неужели не хватит?
Luuzuk Спасибо, я такой недогадливый =) Сейчас попробую. Последний раз редактировалось Ghost3; 31.10.2012 в 11:39. |
31.10.2012, 11:40 | #7 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
При N = 10^9 на мой псевдокод времени скорее всего не хватит, как может не хватить и памяти) но выводить формулу тупо лень
Благодарить в репутацию. Проклинать — туда же
|
31.10.2012, 11:45 | #8 |
Ученик в c++
Форумчанин
Регистрация: 28.02.2011
Сообщений: 162
|
А по-моему ваш пример куда в разы быстрее моего. И мой пока успешно проходил 5 тестов, и на 6-ом была ошибка связанная не с нехваткой времени =)
Можете подсказать как сделать цикл с шагом в "x"? Последний раз редактировалось Ghost3; 31.10.2012 в 11:49. |
31.10.2012, 11:50 | #9 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Код:
|
|
31.10.2012, 11:53 | #10 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Формулу, горит ли n-ная лампочка? В общем случае вычислимой за малое время формулы не существует Нужно как-то организовывать имеющиеся делители в решётки, считать НОК каких-то подмножеств (вероятно, отделяя простые делители большие 7)... В общем, задача местами интересная, действительно.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Олимпиадная задача "Золото племени АББА" на Pascal (№7 с acmp.ru) | Ghost3 | Помощь студентам | 19 | 17.01.2013 21:04 |
Pascal ABC строки - программа, которая каждую встреченную букву "б" заменяет сочетанием "ку" (использовать модули) | Raigo | Помощь студентам | 6 | 17.05.2012 15:35 |
написать программу по управлению клавиатурой: при нажатии "+" загораются лампочки... | NickolayNest | Помощь студентам | 0 | 25.10.2011 20:07 |
Object Pascal "процедуры и функции" еще задача | наташка-ромашка | Помощь студентам | 3 | 10.02.2011 21:25 |
Задача "Счастливый билет" (Turbo Pascal) - трубуется помощь | BzDoN | Помощь студентам | 16 | 20.12.2009 19:29 |