http://community.topcoder.com/tco12/algorithm-schedule/
See You there.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
http://community.topcoder.com/tco12/algorithm-schedule/
See You there.
Название |
---|
If you allready qualified — do not forget about parallel rated round
Can I participate(unofficially, but rated) if I didn't qualified to 2nd round?
From the rules:
For each of Online Rounds 2B, 2C and 3B, TopCoder will organize a parallel round (with the same problems) where the Competitors who have already advanced will be able to compete.
Ok, Thanks.
Btw do you know the reason for that restriction (only those who qualified)? Server load or something like that? Doesn't seem very fair.
TopCoder philosophy is that participation in round is award by itself. Also it is done to battle cheating
Is site loading for anyone? Or arena? I can't even register:(
UPD: Починили
topcoder.com/tc and arena aren't loading on my computer too.
it is working as for me, and people discuss past ipsc 2012 in chat
but site is down
I was able to enter the arena a few minutes ago, but now I can't download the applet
Registration is prolonged by 10 minutes because of connection problems
Автор 300-ки (особенно автор формата входных данных), убейся.
Формат тот еще, да, но задача вполне номальная.
Насколько я понимаю, они не поддерживают vector<vector >, поэтому приходится так издеваться. Не первый раз такое, думаю, надо отнестись с пониманием. (Что-то верстка захавывает int).
В какой-то мере объясняет, но вызывает сразу два других вопроса.
А почему у них не поддерживается вектор векторов? (впрочем, способ задания входных данных в арене уже почти причина...)
А почему нельзя дать формат, когда каждый вектор интов представляется стрингом (последовательности цифр, разделённые запятыми/пробелами/ещё чем-нибудь)?
А почему нельзя дать формат, когда каждый вектор интов представляется стрингом (последовательности цифр, разделённые запятыми/пробелами/ещё чем-нибудь)?
Есть принятое ограничение на максимальную длину строки в 50 символов. Поэтому если представлять вектор чисел строкой с разделителями, то кол-во элементов верктора будет сильно меньше 50.
Один раз видел, когда действительно данные разделялись запятыми, т.е. формат был примерно такой: "Дан вектор строк, соедините все строки в одну, получите строчку, содержащую входные данные, разделенные запятыми". Не сказал бы, что это проще для реализации. Но тут плюс в плане наглядности.
Но так 30^2 четырехзначных чисел все равно не передать.
У меня одного челлендж-фаза не началась?
У меня началась.
У меня только после релогина
Кто может сказать, какую дорогу и как надо изменить в 300-ке в Sample 7 (последний)?
надо уменьшить что-то. это поможет потом.
А можешь сказать, какую именно дорогу? Я так и не смог отдебагать.
d[18][10]=1
Спасибо большое :)
У меня этот семпл не проходил, т.к. некоторая дорога становилась равной -1.
Ага, у меня похожая ошибка :(
Моя прога вообще находила БОЛЬШЕЕ решение О_о Не могу понять, каким образом.
UPD: расстояния должны быть СТРОГО положительными. Подозреваю, что в этом косяк. :(
Установил 0 вершину как посещенную?)
Разумеется :)
А вот я нет, +5 минут дебага)
У меня тоже. Такой тест на самом деле составить несложно.
Моя тоже находила большее решение. Ошибка оказалась в том, что в какой-то момент я дороге хотел поставить длину 0 (это затем увеличивало ответ), а по условию минимальная длина — 1.
Если сделать дорогу с нулевой длиной.
Есть идеи что не так в 900? Насколько я понял условие "одновременности", что если одна команда кинула землю на сектор в один день, то другая команда нам том секторе может эту же землю поднять и перекинуть, но так даже семплы не совпадают)
"Что не так" — похоже, решение жюри :)
Upd: а с семплами всё ок, команды перекидывают землю одновременно, и землю чужой команды на том же ходу использовать нельзя.
Как я понимаю, решение жюри все же почти верное и уж лажало не на семплах.
Что не так с 900? Почему under investigation?
Поняли, что есть бага в авторском, будут тестить на тестерском. В чем бага не поняли. Раунд, вероятно, рейтинговый ибо проблемы тока с 2 челленджами
Толстый шмель почелленжил решение жюри. Точнее выглядело это так, как будто он зачелленджил всю комнату.
Ну в некотором роде я тоже пострадал. Ибо, зная неплохой случай для челенжа, получил 0, и не попал в ТОП50. Но случай был...
Решение расскажи, иначе как понять, что в нем не так.
"Что не так" относилось к "Problem 900 is under investigation"
Не разобрался:( Просто у меня есть вопрос, на чем меня зачелленджили — думал, у тебя такая же проблема.
Как решать 500 и 900? Вроде у всех достаточно простые с виду решения, а в голову только какой-то треш со структурами данных (в 500) лезет.
Аналогично, сидел прикручивал какие-то структуры, но ничего толкового не вышло
500: посчитаем сначала количество треугольников вида x[r] < x[g] < x[b], y[r] < y[b] < y[g] и x[r] < x[g] < x[b], y[r] < y[g] < y[b] в сумме. Это можно сделать, если отсортируем все точки по x, сожмем координаты по y, потом будем перебирать x[r] и поддерживать сумматор, отвечающий на запрос, сколько точек с координатами l <= y <= r. Если текущая точка (x[r], y[r]), то при c = sum(y[r] + 1, MAXY) к ответу нужно прибавить c * (c — 1) / 2. Далее из сумматора удалить точку y[r] и перейти к следующему x. Вот, а теперь из ответа нужно вычесть кол-во треугольников x[r] < x[g] < x[b], y[r] < y[g] < y[b] — т.е. кол-во 3-инверсий. Это известная задача, можно тем же сумматором посчитать.
500 — сожмем координаты, посортим точки по x. заведем 2 дерева отрезков с суммой, в первое из них положим все точки.
теперь идем снизу вверх (по x) и поддерживаем наши деревья отрезков так, чтобы в 1м были все точки выше, а вот 2м — все ниже (ну просто "перекладываем" из 1го дерева во 2е). и в процессе считаем 2 величины:
количество "любых" треугольников с углом в красной вершине
x(r) < x(g) < x(b) && ( y(r) < y(g) < y(b) || y(r) < y(b) < y(g) )
это T1.get(y_i, n) * (T1.get(y_i, n)-1) / 2;
количество треугольников где точки "на одной прямой"
x(r) < x(g) < x(b) && y(r) < y(g) < y(b)
это T2.get(1,y_i) * T1.get(y_i, n)
ну и в конце просто вычитаем 2е из 1го
Мне кажется, 500 можно решить и без дерева интервалов. Однако я, к сожалению, не успел дописать решение во время соревнования, поэтому, пожалуйста, скажите, если следующие рассуждения неверны.
Нужно понять, что нам надо посчитать количество всех возможных хороших треугольников, которое равно количеству всех треугольников минус количество плохих. А плохие бывают всего двух видов — когда у трёх точек монотонно увеличиваются сразу две координаты, и когда одна монотонно увеличивается, а другая уменьшается. Первый случай решается с использованием метода динамического программирования за O(N*logN), а второй — аналогично, только с инверсией одной координаты.
хороший или плохой?
Хороший.
это в вашем решении он хороший, а по условию задачи — плохой.
Подождите, но ведь это треугольник как раз такого вида, какие нам надо посчитать (если ось X направлена вправо, а Y — вверх), значит хороший, разве нет? Впрочем, я уже понял свою ошибку: бывают плохие ещё и вида типа такого, как Вы нарисовали, только с Y-координатой инвертированной, — а я их не учитываю. Тогда извиняюсь.
если ось X вправо, а Y — верх, то тогда хорошие только такие:
Да, да, Вы правы, действительно, и это я тоже проглядел. Что ж, зато теперь не обидно, что немного не успел дописать :-)
Плохой ведь
На контесте не дописал решение по 300-ке за O(N4). А можно было (как-нибудь не слишком адово) писать за более быструю асимптотику писать?
P.S. Чужие решения смотреть не хочу до отправки в практис рум.
Многие (в т.ч. я) писали вообще за O(N5). Мне кажется, теоретически можно за куб, если заранее найти все рёбра, по которым возможен переход, но это уже много возни.
Я не знаю решения быстрее, чем за 5ю степень
Я не уверен в правильности своего решения, но в нём чистая четвёртая степень.
Когда мы моделируем процесс движения торговца, на каждом шаге приходится искать минимум из всех рёбер. Т.к. перед каждым моделированием менялось лишь одно ребро, то все минимумы можно не пересчитывать, а только один. Получается O(N4). Или я что-то не понимаю?
UPD: это неправда.
Да, наверное. Но так как ограничение всего 30 я особо не парился
Так ведь надо было искать минимумы не среди всех исходящих ребер, а среди исходящих в непосещенные вершины ребер — а после изменения ребра множество непосещенных вершин будет уже другим?
Да, значит я не прав. Хорошо, не стал пытаться это написать во время раунда.
У меня вроде бы за четвертую. Просто жадно когда решаем куда-то пойти ставим вес ребра. Всего, понятно, n^2 ребер, строим путь за квадрат
Можно чуть подробнее? Куда ставим?
Пишем рекурсивную функцию, которая помечает пройденные вершины, храним флаг — меняли ли уже какое-то ребро или нет.
Если уже меняли какое-то ребро, то в текущей вершине находим первую неиспользованную по весу (естественно, изначально для каждой вершины посортировали массивы исходящих рёбер по стоимости ребра).
Если не меняли, опять же можем взять первую неиспользованную вершину, при этом считаем что вес ребра не меняли. Второй вариант: можем поменять вес ребра. Рассмотрим множество непомеченных вершин из текущей, отсорченных по возрастанию весов. Есть три варианта:
идем в первую вершину, тогда максимально увеличиваем её вес, чтобы она все ещё была первой в списке (формулка),
идем во вторую вершину, тогда максимально увеличиваем первую, чтобы можно было пойти во вторую (упс, еще если не получится, надо уменьшить вторую, минимально, чтобы она стала первой в списке),
идем в какую-то другую вершину — по любому должны установить вес ребра в вес ребра, идущего в первую вершину списка, +/-1.
Устанавливаем флаг измененного ребра, запускаем рекурсию
Да, зашло решение за четвертую.
Контест куда-то пропал из Active Contests.
Решили сделать вид что контеста не было?)
[:|||||||||||||||||||||||||:], так Длугач троллил в Admin Lobby :)
Как отлично — теперь арена еще и падает :)
Кто-то может по такому поводу обьяснить как футболки распределяются? Вот из правил выдержка "The Algorithm Competition will award T-shirts to the 350 Competitors with highest Ranks, where a Rank of a competitor is defined as the best taken place out of all Online Rounds of Online Stage 2 in which this Competitor achieved a score greater than zero." Если я правильно понял, то достаточно один раз попасть в топ 350. С другой стороны в чате арены говорят, что даётся всем, кто примерно топ-117 из каждого раунда.
Ну топ117 достанется с гарантией. Увеличится за счет того, что есть люди попавшие туда несоклько раз.
Берем у каждого лучшее место, какое он занимал, сортим по нему. Первые 350 людей в списке — молодцы.
Я 122. Надеюсь, что будет.
При равенстве лучшего места сортим по второму лучшему или как?
Даем всем вроде бы.
Всё до меня дошло, спасибо!
Для каждого береться лучшее место из раундов 2А, 2В, 2С. По ним делаеться общая таблица и первим 350 дают футболки.
По моим подсчётам футболки получают первые 137 в каждом раунде.
3й раунд уже из статистики — проходной порог не изменился.
Скачать .xlsx
Скачать .csv
Спасибо за хорошие новости. Не думал, что 112 места будет достаточно. В этом году как-то не получалось у меня с футболками, я даже второй раунд GCJ умудрился проспать, а тут за один день обеспечил себе футболки RCC и TCO.
а казалось бы, первые 116 гарантированно получают: 116*3<350