Сап, мейлач. С недавних пор начал участвовать в разных турнирах по спортивному программированию, одиночному и командному. Иногда даже были какие-то успехи. В чем суть, около года назад заметил одну задачку, которую ни я, ни мои знакомые не смогли решить. Сейчас же вспомнил о ней. http://acmp.ru/index.asp?main=task&id_task=561 В 2005 году она была на одном турнире, но и там ее никто не решил. Сможет ли мейлач ее осилить?
>>151236246 (OP) ничо не понимаю в спортивном кодинге, но вкотилсо в условии намек на то что сортировка должна осуществляться без вычисления самой башни, по каким то признакам?
>>151237003 Раньше условие было немного иным, и можно было посчитать полный размер башни через тип Extended на Паскале, у меня даже имеется этот код, но там были неточности при округлении. Сейчас уже считать напрямую нельзя, только по признакам.
>>151238768 зачем, если можно скринить дальше можно развивать формулу и например учитывать в коэффициенте числа которые стоят перед конкретным числом в башне
>>151239176 например, коэф каждого числа это его порядковый номер умноженный на произведение всех чисел, стоящих перед ним но это как то слишком наивно
Думаю надо чтото типа системы очков сделать. Чем выше порядок числа тем больше строка получает очков и потом сравнить очки всех строк и построить по порядку.
давайте сначала рассмотрим башни длиной в 2 их можно сравнивать только при одинаковых основаниях или при одинаковых степенях то есть сначала надо будет сводить как то
>>151236246 (OP) Инетересная задача. Я бы ее стал решать так: надо приводить все башни к одному основанию, например, к 2. То есть a0^a1^a2=2^2^(lg(lg a0)+a2 lg(a1)) Тогда, например, два числа a0^a1^a2 и b0^b1^b2 уже не надо сравнивать напрямую, надо сравнивать показатели lg(lg a0)+a2 lg(a1) и lg(lg b0)+b2 lg(b1), а логарифмы уже без проблем влезают в память. Понятно, что алгоритм надо чуть усложнить с учетом разной длины башен, но я думаю, это можно сделать. Например, с помощью логарифмов можно выровнять длины башен так, чтобы самые короткие удлинились. Если длина башни больше трех, алгоритм можно повторять рекурсивно для a2 и b2. Ну это идея, которая у меня возникла за 5 минут.
>>151240745 Для начала у всех башен нужно удалить всё, что находится правее 1. Далее отфильтровать простые еденицы - то есть если в основании 1, то всё правее отфильтруется и эти еденицы автоматом в самой жопе находятся и их сравнивать смысла нету.
>>151240986 На одимпиадах обычно вроде нельзя пользоваться подобными расширениями. Только самый базовый набор типов, только хардкор. Раньше был целый класс задач на большие числа, и алгоритм надо было реализовывать всегда самому. Как сейчас, не знаю.
>>151241102 >Раньше был целый класс задач на большие числа Больше всяких longint'ов и прочей стандартной числовой чепухи, но такие задачи были на целые числа и решались с помощью строк. >>151241175 >Каждое из aij - целое число в пределах от 1 до 99 И в примерах есть основания еденицы.
>>151240745 Сам думал о чем то подобном, но в итоге ни к чему не пришел. Интересно. >>151241102 В задачах на большие числа обычно используют массивы, где в каждую ячейку пихают отдельный разряд.
>>151241275 >Сам думал о чем то подобном, но в итоге ни к чему не пришел. Интересно. Просто очевидно, что лучше свести задачу в вычислению логарифмов, так расходуется минимум памяти, надо придумать, как к этому свести задачу.
Вообще, что-то мне подсказывает, что большие числа в этой задаче использовать не нужно. Судя по результатам, лучшие решения используют совсем мало памяти, я думаю там какое-то похожее решение. Задача больше математическая, чем кодерская.
>>151241434 >Задача больше математическая, чем кодерская. Ну это понятно. Ключевой момент - создание математической модели алгоритма сравнения чисел с кучей степеней.
>>151242280 У тебя есть два числа, a0^a1 и b0^b1, благодаря этой формуле тебе надо сравнить двойной логарифм от a0 и b0 и повторить процедуру для a1, b1.
>>151249263 Ну как тебе сказать, это просто лексиграфическое сравнение списков. На тестовом примере получилось почти правильно, но на самом деле это хуета.
Не совсем понимаю, как вам простое взятие логарифма поможет. Даже логарифм от искомых чисел не вместится ни в какой тип данных (или, если какой-нибудь BigDecimal в Java юзать с бесконечной точностью, всё равно не полезет в память компьютера). И даже логарифм от логарифма не полезет.
Можно исхитриться, и делать так: пишем компаратор для сортировки. Даны два числа. Если какое-либо из них не лезет, например, в long double, сравниваем логарифмы. Если опять не лезет - сравниваем логарифмы логарифмов. Потом логарифмы логарифмов лоагрифмов, ну и так далее, пока оба числа не полезут. Какое-то из них уже на каком-то этапе может в ноль превратиться - тогда можно сразу сказать, что оно меньше.
Не факт, что пройдёт по точности. Но это ещё написать надо, что не так просто, а мне лень сейчас.
>>151251726 Почему не хватит? Ты пишешь компаратор. Стандартная сортировка Java или из stl с++ вызывает его n log n раз. Сам компаратор будет не более 9 раз брать логарифм у каждого числа.
>>151252091 Потому что чисел в каждой башне не более 9. Очевидно, что если 9 раз прологарифмировать такую башню, получится число, которое лезет в стандартный тип данных.
>>151252091 Добавлю, если ты захочешь это писать, что логарифмировать нетривиально.
На каждом этапе логарифмирования придется поддерживать что-то вида a + b x^y^z. Если x^y^z достаточно маленькое, то считаем в тупую. Если нет, то отбрасываем старую a (очевидно, что точности вычислений все равно не хватит, чтобы эта a вообще что-то значила). После чего говорим, что теперь new_a = log(b), new_b = log(x) - и переходим к new_a + new_b y^z.
>>151253252 Да, не будет работать при сравнениях типа 1 и 99^99^99, в данном случае могут помочь проверки, типо: если a0<b0, a1<b1...ak<bk, то вторая башня больше, но я ебал это добавлять
>>151254097 А что нет чтоли? В каждом подобном треде появляется подобный отбитый чувачёк и начинает лезть со своим бредом. Одна и та же хуйня каждый раз.
>>151254054 «…я был взят на судно „Северный“, потому что я обнаружил храбрость. Когда осаждали город Хат-Уарит [Аварис, столица гиксосов], я обнаружил храбрость в пешем бою перед лицом царя. Я был назначен на корабль „Сияющий в Мемфисе“. Сражался на воде, на канале Па-джел-ку около Авариса. Я участвовал в рукопашном бою. Я взял руку [убил врага, вероятно знатного, военачальника или богатыря]. Сообщили об этом царскому вестнику. Пожаловали мне „Золото храбрости“. Снова сражались на этом месте. Я снова участвовал в рукопашном бою. Я взял руку. Мне пожаловали „Золото храбрости“ во второй раз.»
«…После того, как его величество разгромил азиатов ментиу-сатет, он поднялся по реке [прошёл вверх по Нилу] до Хентхеннофера для того, чтобы уничтожить нубийские племена лучников иунтиу-сетиу … Его величество поплыл вниз по реке, сердце его радостно, переполнено мужеством и силой. Он схватил южан и северян.»
«И я вез на гребном судне царя Верхнего и Нижнего Египта, покойного Джосеркара, когда он плыл вверх по Нилу в Нубию с целью расширить границы Египта.»
>>151254183 Т.е. каждый раз в любом треде, где какие то долбоёбы тратят время на непойми что, приходит мудрец, поучает вас жизни, а вы его называете "отбитым чувачком"? Хера себе вы ебанутые.
Я не думал, что человек который называет себя вангой, а потом проёбывается имеет право говорить что-то
>>151236246 (OP) Раз тут речь зашла про программирование, то подскажите как в mathcad в условии цикла while поставить логическое И? Я пытался поставить &, но вместо этого в mathcad вылезает шаблон интеграла
С недавних пор начал участвовать в разных турнирах по спортивному программированию, одиночному и командному. Иногда даже были какие-то успехи.
В чем суть, около года назад заметил одну задачку, которую ни я, ни мои знакомые не смогли решить. Сейчас же вспомнил о ней.
http://acmp.ru/index.asp?main=task&id_task=561
В 2005 году она была на одном турнире, но и там ее никто не решил.
Сможет ли мейлач ее осилить?