Напоминаю, что раунд начнется через полчаса. Первая тысяча проходит дальше. Ссылка Предлагаю после окончания обсуждать тут задачи, всем удачи!
№ | Пользователь | Рейтинг |
---|---|---|
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 | 156 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Название |
---|
Как решалась B large?
Та вроде бфс писали.
Че минусуете, я коды смотрел, у некоторых бфс) Хотя не факт, что он рабочий)
Жадностью
Если бы у нас была одна координата, наверное, можно было набирать двигаться в сторону точки пока мы не перейдём ей, иначе назад. А для 2 координат, какая жадность?
Ну как бы понятно, что можно решать задачу независимо по обеим координатам, разве нет?
_Upd. А. Ну да, лажу написал. Там ведь размер шага меняется. _
А на самом деле жадность действительно работает. Сначала посчитать, сколько нужно шагов, потом — выставлять эти шаги от более длинных к менее длинным (каждый раз выбирая ту из координат, которая больше по модулю).
Тоесть бфс по одной, а потом по второй координате?
я решал так, у меня файл получился большой и система не приняла решение:-(
Да, только надо начинать движение с наибольших по длине шагов. Для двух координат все также. Допустим знаем минимальное количество шагов, которое необходимо сделать. Тогда начиная с последних (наибольших по длине) шагов будем ходить в той координате, чье значение по модулю больше в нужном направлении. Для количество ходов k можно прийти в точку (x;y) если выполняется k * (k + 1) / 2 > = |x| + |y| (т.е. суммарная длина сколько пройдем нам хватит чтобы дойти до точки) и (т.к. если у одного шага изменить + на -, то конечная четность не изменится). Этого хватает чтобы определить минимальное количество шагов.
ясно, спасибо
Написав перебор, посмотрим, на каких позициях мы сможем оказаться после i-ого хода. Заметим, что после i-ого хода мы сможем дойти до всех клеток внутри квадрата, образованного четырьмя вершинами с координатами
которые при покраске в шахматную раскраску имеют такой же цвет, что и вершины этого квадрата.
Таким образом, мы можем быстро узнать длину минимального ответа. Дальше, нам надо его восстановить. Будем восстанавливать с конца рекурсивно. Мы можем прыгнуть в 4-ых направлениях. Прыгнем в том направлении, при котором сумма модулей координат меньше всего и запустимся рекурсивно от этой клетки.
Вот код
World chart showing
1000 * #Remaining / #Qualification_round
taken from Google CodeJam statistics page.Chart with
#Remaining
only (colors are not the best)Can anyone tell me whats wrong with my code for problem A which passes the small input, but not the large one? My idea is, that I count for every position the number of substring which could end at this position and sum them all up in the end...
Maybe accumulate is the problem:
vector<int> v(m);
return accumulate(v.begin(),v.end(),0);
will returnint
instead oflong long
template <class InputIterator, class T>
T accumulate ( InputIterator first, InputIterator last, T init );
accumulate(v.begin(),v.end(),0**LL**);
Thank you, got it!
why the analysis for 1B round hasn't been published yet?
а как на халяву реализовать C? Есть способ проще чем дерево отрезков с проталкиваением?
Я написал sqrt-декомпозицию.
А координаты сжимал? там ведь 10^6 (еще на два умножить ибо со знаком)
Да, сжимал. Вот код: http://pastebin.com/VGHRMmZ8
Или что то другое подразумевалось под сжатием? У меня как раз 2*10^6 и есть. Для GCJ это нормально. За минуту-две успевает посчитать.
Под сжатием координат подразумевается заменение реальных значений на значения поменьше с сохранением исходного порядка значений. К примеру есть у тебя q=10^5 запросов L[i], R[i] к дереву отрезков на интервале [1..10^6]. Понятно, что для обработки запросов достаточно q * 2 т.е. 2 * 10^5 ячеек в дереве отрезков. Можно посортировать массив всевозможных значений L[i], R[i] сделать значения уникальными, и заменить L[i], R[i] на индекс соответствующего значения в сортированном уникальном массиве. тогда будет достаточным q * 2 ячеек в дереве отрезков
Внимание вопрос: что ты называешь сжатием координат?
Я называю сжатием координат именно то, что ты сейчас описал.
Меня просто смутила фраза "там ведь 10^6".
Упс, не заметил. Ты мапой сжимаешь а не сортировкой :)