Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничные лампочки / 25 сообщений из 92, страница 1 из 4
13.02.2016, 01:19
    #39170092
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Здарова челы!

Сори за боян и олимпиаду. В смежном топике ботаны увлеклись сравнением чисел
астрономической разрядности (дай бох им всем здоровья) а мы тут будем колбасить
теплые "ламповые операции". OK! Let is go!

Задача.

http://acmp.ru/index.asp?main=task&id_task=337
...
Рейтинг: 0 / 0
13.02.2016, 02:14
    #39170106
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
mayton,

но ведь суббота!
...
Рейтинг: 0 / 0
13.02.2016, 02:32
    #39170109
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
В принципе решается тупым перебором, но вот уложится ли он в 2 секунды - не уверен.
Точнее, при фактических входных данных, конечно, уложится, а вот при количестве лампочек ближе к 10 9 - уже вряд ли.
...
Рейтинг: 0 / 0
13.02.2016, 07:22
    #39170149
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Считаем от 1 до N, каждый шаг проверяем на какое количество P i делится нацело. Если нечетное "итого+1"
дальше оптимизация: разложение на простые, поиск минимального шага цикла, поиск одинаковых интервалов и т.д. и т.п.
...
Рейтинг: 0 / 0
13.02.2016, 07:30
    #39170150
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
НОД(P) это шаг цикла НОК(P) предел цикла, дальше он повторяется.
...
Рейтинг: 0 / 0
13.02.2016, 07:35
    #39170151
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
В массиве P много повторов (100 элементов <50). Все задвоения надо просто выкинуть.
...
Рейтинг: 0 / 0
13.02.2016, 09:03
    #39170166
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Чтобы не делить, проще использовать К счетчиков каждый со своим шагом Р:
нашли минимум, посчитали кол-во счетчиков равных минимуму, нечетное - "итого+1", каждый счетчик в минимуме увеличить на Р и т.д.
...
Рейтинг: 0 / 0
13.02.2016, 13:36
    #39170286
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Пока есть мысль что некоторые кратные инверсии типа 2:4 можно соптимизировать
и учесть заранее. Два на четыре это тоже самое что четыре но со "сдвигом".

Есть также мысль проверять взаимную простоту чисел.
...
Рейтинг: 0 / 0
13.02.2016, 17:30
    #39170373
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Входные данные

nLamps = 1000000000;
nInversions = 10;
Periods = new int[]{19,2,7,13,40,23,16,1,45,9};

Результат
Time elapsed: 00:00:05.2807186
Lamps = 525373291. Press any key to continue . . .
...
Рейтинг: 0 / 0
13.02.2016, 17:47
    #39170380
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Биткарта?
...
Рейтинг: 0 / 0
13.02.2016, 18:16
    #39170392
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
maytonБиткарта?
Точно. Забыл выкинуть лишнее.
Поправил =)

Time elapsed: 00:00:00.6150498
Lamps = 525373291. Press any key to continue . . .
...
Рейтинг: 0 / 0
13.02.2016, 18:18
    #39170394
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
SiemarglВходные данные

nLamps = 1000000000;
nInversions = 10;
Periods = new int[]{19,2,7,13,40,23,16,1,45,9};

Результат
Time elapsed: 00:00:05.2807186
Lamps = 525373291. Press any key to continue . . .

1. Выкинь единицы. Просто добавь флаг инверсия результата. Т.е. вместо количество нечетных - кол-во четных.

2. Считай до НОК, это примерно 50 млн., дальше все повторяется. Например счетчики 4 и 5: НОК 20, внутри 20 (4,5,8,10,12,15,16, 20) 8 ламп. В миллиарде 8 * 1000000000 / 20 = 400000000. Не забудь что остаток может быть: например НОК = 30, предел 100, т.е. результат = (цикл до 30) * 3 + (цикл до 10).

3. Деление убрал?

mayton, для биткарты 16 Мб не хватит.

PS Вообще некогда, попозже, если успею - напишу. Но вроде все очень просто. Я основные детали алгоритма выше уже изложил.
...
Рейтинг: 0 / 0
13.02.2016, 18:45
    #39170403
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Про шаг 1 наврал, надо считать без него, а потом инверсия "итого = всего - итого"
...
Рейтинг: 0 / 0
13.02.2016, 19:02
    #39170409
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Dima Tmayton, для биткарты 16 Мб не хватит.

PS Вообще некогда, попозже, если успею - напишу. Но вроде все очень просто. Я основные детали алгоритма выше уже изложил.
Думаю что в этом весь цимес.
...
Рейтинг: 0 / 0
13.02.2016, 19:16
    #39170416
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Да, цимес имеется.

У меня на сайтике стабильно заваливается 7й тест - если биткарта, то 2с мне нехватает, если без биткарты - то завал по памяти (
Переписывать на С++ не хочу.

В общем с биткартой на данных ниже у меня
nLamps = 1000000000;
nInversions = 10;
Periods = new int[]{19,2,7,13,40,23,16,1,45,9};

Time elapsed work+count: 00:00:01.2806298
...
Рейтинг: 0 / 0
13.02.2016, 20:23
    #39170440
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
SiemarglУ меня на сайтике стабильно заваливается 7й тест
Написал. так же 7. Wrong answer. Есть какая-то комбинация в условиях которую не учли.
...
Рейтинг: 0 / 0
13.02.2016, 20:36
    #39170447
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
SiemarglПереписывать на С++ не хочу.
на C# используй структуры (struct вместо class), будет близко по скорости к c++
...
Рейтинг: 0 / 0
13.02.2016, 20:38
    #39170448
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Dima TSiemarglПереписывать на С++ не хочу.
на C# используй структуры (struct вместо class), будет близко по скорости к c++
а есть, вообще, готовый пример, показывающий что сортировка структур идет быстрее сортировки классов? Или это религиозная догма.
Пытался както померять скорость на структурах и на классах - разницы не увидел.
...
Рейтинг: 0 / 0
13.02.2016, 20:45
    #39170451
Aleksandr Sharahov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Dima TSiemarglУ меня на сайтике стабильно заваливается 7й тест
Написал. так же 7. Wrong answer. Есть какая-то комбинация в условиях которую не учли.

Например, число в данных встречается дважды.
...
Рейтинг: 0 / 0
13.02.2016, 20:46
    #39170452
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Dima TЕсть какая-то комбинация в условиях которую не учли.
Попробуйте такое:
Код: plaintext
1.
1000000000 17
2 3 5 7 11 13 17 19 23 29 31 37 39 41 43 47 49
...
Рейтинг: 0 / 0
13.02.2016, 21:00
    #39170457
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Dimitry SibiryakovDima TЕсть какая-то комбинация в условиях которую не учли.
Попробуйте такое:
Код: plaintext
1.
1000000000 17
2 3 5 7 11 13 17 19 23 29 31 37 39 41 43 47 49

спасибо, все банально тупо
переполнение при расчете НОК, выход за разрядность
...
Рейтинг: 0 / 0
13.02.2016, 21:10
    #39170464
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Dimitry SibiryakovDima TЕсть какая-то комбинация в условиях которую не учли.
Попробуйте такое:
Код: plaintext
1.
1000000000 17
2 3 5 7 11 13 17 19 23 29 31 37 39 41 43 47 49

Переполнение убрал, но теперь "Time limit exceeded", надо еще какую-то оптимизацию дополнительную.
...
Рейтинг: 0 / 0
13.02.2016, 21:13
    #39170466
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Можно попробовать окна из биткарт, как тут делал
...
Рейтинг: 0 / 0
13.02.2016, 22:44
    #39170515
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Все гораздо хуже. Я пока сходил за пивом, изобрел решение без биткарт, без массивов и вообще без сложностей.

Все= в 2с не укладывается этот шарп (
...
Рейтинг: 0 / 0
13.02.2016, 22:59
    #39170521
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные лампочки
Dima TSiemarglПереписывать на С++ не хочу.
на C# используй структуры (struct вместо class), будет близко по скорости к c++
Поучи свою бабушку яичницу жарить =)

У меня уже идеальный алгоритм.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничные лампочки / 25 сообщений из 92, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]