Главная | Настройки | NSFW
Тема:
Доски


[Ответить в тред] Ответить в тред

[Назад] [Обновить тред] [Вниз] [Каталог] [ Автообновление ] 34 / 7 / 15

Олимпиадное программирование Anonymous No.1237
Обсуждаем олимпиадное программирование ИТТ. Делимся хаками, обсуждаем задачи, обсуждаем разборы раундов и помогаем друг другу.
Anonymous No.1238
>>1237 (OP)
Какие же омеги, пиздец фу блять. Даже не заговорила бы с таким задротышем
Anonymous No.1240
proxy.duckduckg[...].gif (4 KB, 622x550)
Вот интересная задача. Объективно простая, но с подвохом.
http://acmp.ru/index.asp?main=task&id_task=822
Anonymous No.1241
>>1240
А как этот сайт работает? Туда программу надо загружить и она там сама выполняется? php нету, хотя на нем, наверное, никто такие задачи и не решает.
Anonymous No.1242
>>1241
Да, там есть тестирующая система. Загрузить можно через файл или в строку.

Имеет ли смысл использовать php для решения олимпиадных задач? Даже джаваскрипт работает со скрипом.
Anonymous No.1243
>>1240
Ищем сторону a через x1, y1, x2, y2
Сторону b через x1, y1, x3, y3
Сторону c через x2, y2, x3, y3
p = (a + b + c) / 2
Применяем формулу Герона.
Устанавливаем нужный пресет плавающей точки в потоке вывода
Anonymous No.1244
>>1243
Задачу сдал?
Anonymous No.1245
k-0scVMiIe8.jpg (274 KB, 742x1080)
>>1238
Google / Яндекс

Полагаю, эти омеги были разобраны еще щеночками
Anonymous No.1246
>>1244
Не хочу пока регистрироваться, почту палить, никнеймы. Был студенческий акк еще на тимусе, но я там совсем все забросил
Anonymous No.1247
Интересно, а аноны тут учавствовали в олимпиадах? Были ли какие-нибудь успехи?
Anonymous No.1248
>>1245
Как же хорошо быть шавкой корпорации
Anonymous No.1965
Как бы вы решили такую задачу:
Даётся последовательность целых чисел A_1, A_2,...,A_n от 1 до 10^9. Если все числа в последовательности различны, выведите "Yes", иначе "No".
2≤N≤200000

Интересно решение за линию, у меня за логарифм вышел.
Закинул всё в сет, а потом сравнил N и длину сета
Anonymous No.1966
изображение.png (19 KB, 544x281)
>>1965
Зачем нужно лишнее выделение памяти, если отсортировать будет быстрее? Сет это внутри вовсе красно-чёрное дерево вроде как - у него не очень хорошая константа.
Есть сортировка за линейное время, но там тоже константа такая, что n*log(n) быстрее на всём 2≤N≤200000.
10^9 это не так уж и много... ещё есть одно решение за линейное время требующие 1 гб памяти.

>Если все числа в последовательности различны
Помимо этого достаточно найти одну коллизию, и выйти. Логичнее всего прерывать сортировку при нахождении хотя бы одной - нет нужды сортировать или закидывать в set полностью.

>>1247
Участвовал во всеросе когда-то. Не знаю насчёт успехов, два этапа прошёл, а на третий региональный не поехал, потому что мне это было не интересно и я не смотрел даты, а преподаватель смог мне сообщить куда нужно приехать лишь за два часа до начала (потому что я не использовал мобильник) и я уже физически туда никак не успевал. Не очень то и хотелось, правда.

>>1243
>Применяем формулу Герона
Говно ебаное с корнем тормозным, кстати.
Вот картинка, очень простая формула для площади треугольника с углом в начале координат. Причём, у этой площади есть знак. Достаточно сложить площади трёх таких "двуугольников", где вершинами выбирать циклически AB, BC и CA. И модуль от этого взять. Там это ещё как-то в одну формулу сворачивается.
Anonymous No.1967
>>1965
Ебану массив в 200000 элементов, а числа буду использовать в качестве индекса.
Anonymous No.1968
>>1237 (OP)
>Обсуждаем олимпиадное программирование ИТТ.
Не люблю эту хрень. В школе все почему-то ко мне относились как к неебаца-кулхацкеру-кодеру, хотя я обычная веб-макака, лол. Учитывая, мои js-навыки, олимпиадные задачки я решал, а меня в добровольно-принудительном порядке на олимпиаду тащили, ибо школа есть мухосранская, херово.
Anonymous No.2540
>>1237 (OP)
Мимо не удавшийся олимпиадник. Задавайте вопросы. Знаком с IOIщиками
Anonymous No.2660
>>1965
Очевидный xor.
Anonymous No.2661
>>1965
>Закинул всё в сет
Это не логарифм. Это линия + логарифм.
Anonymous No.2662
>>2661
Он это и имел ввиду, что O(n*log(n)). Очевидно, что данные просто считать/перебрать возможно лишь за O(n), и никакого алгоритма быстрее O(n) не может существовать.
Пост отредактировал Anonymous
Anonymous No.2663
>>1967
Завести массив битов 10^9 зануленный и записывать туда единицы по индексу чисел из последовательности, если a[i] = 1, то печатаем no и выходим, если дошли до конца, то печатаем yes.
Какие подводные у этого способа?
Anonymous No.2664
изображение.png (93 KB, 906x708)
>>2663
Я уже предлагал: >>1966
>Какие подводные у этого способа?
Давай проверим, а то лень душит тред, что всем впадлу 50 строчек написать.
Мне кажется тем, что он упирается в память. Один хочет set создавать, другой массив на гигабайт. Ненормальные.

У меня вот получилось (по вертикали время выполнения, по горизонтали размер данных). И я прав, подход с сортировкой самый быстрый. Даже если в test_4 дописать копирование массив в новый через std::vector<int> brr(arr.begin(),arr.end()) чтобы было честно - всё-равно ничего не меняется.
Массив чисел (рыжим) работает на всех значениях до 200000 наиболее медленно из всех алгоритмов, массив битов(жёлтым; std::vector<bool> же вроде как в виде битсета специализируется?) работает лучше и опережает преобразование в std::set(зелёным) только на значениях больше 12000, а сортировка(розовым) работает за примерно такое же O(nlogn) как и std::set, но с в 12 раз лучшей константой опережая все остальные подходы на всём диапазоне 2≤N≤200000.
Код плюсовый, который в консоль выводит питонокод: https://pastebin.com/DR0u4fiS
Код питонный, где в начале нужно заменить выход плюсового кода, и который выводит график: https://pastebin.com/f03epuKa
Пост отредактировал Anonymous
Anonymous No.2665
>>2664
>другой массив на гигабайт.
Нет же, массив бит, std::vector<bool>
Anonymous No.2666
>>2665
А, да. Гигабайт.
Anonymous No.2668
Предлагаю задачу:
тык
Петя написал программу, которая считывает беззнаковое 64-битное целое число X, умножает его на 3 и сохраняет результат как беззнаковое 64-битное целое число (в языке C/C++ такой тип называется unsigned long long). После чего Петя предложил Маше за 3 попытки угадать по результату, какое число он ввёл исходно. Маша справилась за одну попытку. А получится ли это у вас?

Входные данные содержат одно целое число в интервале от 0 до 2^64−1 включительно --- результат работы программы, которую написал Петя.

Вам надо вывести введённое Петей число X. Число должно находиться в интервале от 0 до 2^64−1 включительно.
Anonymous No.2669
>>2668
x = y / 3 + (3 - y % 3) % 3 * (2^64 / 3)
Anonymous No.2671
>>2669
Это не будет работать на некоторых числах.
Пост отредактировал Anonymous
Anonymous No.2672
изображение.png (185 KB, 1420x770)
Забыл ещё unordered_set (называется hash), который за константу работает.
Ну и вот графики для большего диапазона чисел.
Ещё несколько гибридных подходов прикрутил, но без сложных сложностей - они тоже на десять строк, получилось что-то среднее между массивом на миллиард элементов и обычным алгоритмом с сортировкой.
Битовые поля быстрее всех выше миллиона чисел. Самый тупой код самый быстрый, лол.
Так и не понял как этот чёртов radix написать правильно - хорошо хоть обычный std::sort обогнал, собственно на >20000 элементов он уже стабильно быстрее std::sort - довольно странно что такой алгоритм не содержится в стандартной библиотеке.


>>2665
Я же сделал массив бит тоже специально и он как раз примерно в 8 раз быстрее получился, чем массив на гигабайт из чаров.
Предположил, что доступ к элементу битового массива через сдвиги будет ещё хуже массива байт - но с этим ошибся.
Anonymous No.2676
>>2668
https://ideone.com/ngtjXn
Anonymous No.2680
>>2672
Не понял, так std::vector<bool> быстрее всего? Так а по памяти сколько? 119кб получается, это много?
Anonymous No.2681
>>2680
Только на числах больше 3000000. Это так называемая сортировка подсчётом по сути. На меньших эффективнее поразрядная сортировка (комбинированная с квадратичной, но очень быстрой на малых числах и std::sort), и на совсем маленьких (меньше 500) обычный std::sort.
120 мб же. Там же миллиард, по одному байту на 8 чисел. Достаточно много. У меня на олимпиаде было ограничение 2 секунды/256 мб памяти.
Пост отредактировал Anonymous
Anonymous No.2682
изображение.png (127 KB, 885x671)
>>2672
Помучил кстати ещё радикс, и добился того, что он работает со скоростью близкой к std::vector<bool>, причём без использования дополнительной памяти.

Любопытно получилось, что передавать разряд как параметр шаблона (то есть в компайл-тайме) то получается почти в два раза дольше сортировать, чем если засунуть его в список аргументов, чтобы он в рантайме считался. Потому что в первом случае компилятор делает четыре разных функции видимо, а во втором там один и тот же код по одному и тому же адресу крутится.
Anonymous No.2683
>>2681
Причём тут сортировка? Там же задача была другая совсем, напечатать ес если ес и но если но.
Anonymous No.2684
>>2683
Задача к ней сводится. Предложи концепцию алгоритма без неё?
Anonymous No.2686
>>2684
Читаешь число i, если a[i] уже равно 1 печатаешь No и выходишь, если нет пишешь в a[i] 1, читаешь следующее и тд, в конце печатаешь Yes

[Назад] [Обновить тред] [Вверх] [Каталог] [ Автообновление ]
34 / 7 / 15

[Ответить в тред] Ответить в тред

15000

Ответ в тред No.1237
Настройки
Избранное
Топ тредов