|
Помогите понять задачу | ☑ | ||
---|---|---|---|---|
0
DES
10.08.18
✎
06:39
|
тестовое задание для абитуры
Раскрашивание точек ТL =1 секунда МL=16 мегабайт Лимит по памяти важен. Далеко не все интерпретируемые языки смогут запустить интерпретатор в этих ограничениях. Выбирайте инструмент в соответствии с задачей Реализуйте структуру данных, которая может выполнять следующие две операции: PAINT(х, у, со1) -- покрасить точку (х, у) в цвет соl QUERY(х, у) — определить цвет точки (х, у). Покрашенные точки могут быть красными или синими. Изначально все точки плоскости считаются непокрашенными. *Известно, что размер любого множества точек, в котором совпадают остатки от деления координат х на 100019, не превосходит 100. Поясните что им *ИЗВЕСТНО ? последнее предложение вызывает затруднение понимания. |
|||
1
0xFFFFFF
10.08.18
✎
06:46
|
Ощущение корявого перевода вырванных из контекста предложений
|
|||
2
Лодырь
10.08.18
✎
06:54
|
Обрати внимание что область координаты Х не задана.
Условие, которое ты спрашиваешь, говорит о том, что разброс точек по Х не должен превышать 100019*100 Фактически крайняя левая точка если имеет координату Хmin то крайняя правая - Хмах = Хmin+100019*100-1 |
|||
3
Лодырь
10.08.18
✎
06:56
|
вдогонку к (2) И даже больше того, это при условии константной Y. Так же можем сказать, что больше чем 100 по оси Y быть не может.
|
|||
4
DES
10.08.18
✎
07:08
|
(3) стало еще меньше понятно
|
|||
5
DES
10.08.18
✎
07:08
|
они намекают на размерность матрицы?
|
|||
6
DES
10.08.18
✎
07:16
|
Понятно что намекают на необходимость произвести контроль исходных данных типа
if (x%100019)<=100 then good else alarm т.е. тестируют на внимательность при чтени условий задачи? |
|||
7
Йохохо
10.08.18
✎
07:20
|
(6) размер группы, а не Х. Х, У могут быть сколь угодно большими, но всего в множестве не больше 100019*100 точек.
|
|||
8
Ненавижу 1С
гуру
10.08.18
✎
09:01
|
размер группы у которых координаты: x, x+100019, x+2*100019, ...
не более 100 очевидно таких групп не более 100019 |
|||
9
Малыш Джон
10.08.18
✎
09:10
|
(0) если бы это было задание для языка низкого уровня(а то и машкода), то я бы сказал, что это условие нужно для организации разметки видеопамяти(ограничение размера блоков и общего количества)
|
|||
10
DES
10.08.18
✎
09:11
|
а координата У любая ?
В чем смысл этого уточния задания? |
|||
11
DES
10.08.18
✎
09:12
|
В решении что нужно предусмотреть?
|
|||
12
Малыш Джон
10.08.18
✎
09:18
|
Или как вариант, если для хранения множества всех точек(для ускорения определения цвета, например) используется структура данных, то размер каждого элемента - не превышает 100, т.е. хватит 1 байта.
|
|||
13
DES
10.08.18
✎
09:50
|
В задании РЕАЛИЗОВАТЬ СТРУКТУРУ ДАННЫХ
т.е. не написать программу, нарисовать ТЗ на структуру хранения данных для указанной задачи. Т.е., например МАССИВ струтур где элемент структура типа: struct screen { byte x, y; char colour; }; и на этом все? |
|||
14
Малыш Джон
10.08.18
✎
09:52
|
(13)"Реализуйте структуру данных, которая может выполнять следующие две операции"
т.е. не просто структуру, а структуру и два метода к ней |
|||
15
Chang Woo
10.08.18
✎
09:59
|
(0) Это значит что зазмер Х * Y не превышает 100019 * 100
Но не обязательно что размер Х = 100019, а Y = 100, возможны любые комбинации, например размер X = 1000190, Y = 10. Главное чтобы произведение макс.Х * макс.Y было меньше 100019 * 100 |
|||
16
Chang Woo
10.08.18
✎
10:00
|
Короче задача не для тупых которые не могут понять даже условие.
|
|||
17
Chang Woo
10.08.18
✎
10:01
|
И Y не может быть больше 100, тоже из этого же условия.
|
|||
18
kww163
10.08.18
✎
10:06
|
По русски, размер множества не превышает 100, при условии.
А вот условие ))) не по русски. |
|||
19
Лодырь
10.08.18
✎
11:15
|
(15) А кто сказал, что множество точек - прямоугольное?
|
|||
20
Lama12
10.08.18
✎
11:22
|
(0)ИМХО. Задача поставлена не корректно.
"...Реализуйте структуру данных, которая может выполнять следующие две операции..." Структура данных не может выполнять операции. По последнему предложению, поддержу (7) |
|||
21
Вафель
10.08.18
✎
11:23
|
(13) не удобно будет искать цвет точки
нужно чтоб х, у были индексами |
|||
22
DES
10.08.18
✎
11:31
|
(21) это если задать матрицу размерность охулион на охулион, тогда индексы.
А если линейный массив размерностью N - то …. |
|||
23
NSSerg
10.08.18
✎
11:32
|
(20) Структура данных может выполнять операции. Так как в ЯП у структур есть методы.
|
|||
24
DES
10.08.18
✎
11:32
|
(20)т.е. по (7) уже можно сказать про размерность массива?
|
|||
25
NSSerg
10.08.18
✎
11:39
|
+ (23) Структура данных (англ. data structure) — программная единица, позволяющая хранить и ОБРАБАТЫВАТЬ множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый НАБОР ФУНКЦИЙ, составляющих её интерфейс.
https://ru.wikipedia.org/wiki/Структура_данных Ключевые слова выделил капсом. |
|||
26
Вафель
10.08.18
✎
11:40
|
На 1с - это типо
Соотвествие[x + '_' + y] = Цвет |
|||
27
mistеr
10.08.18
✎
11:42
|
(15) > Это значит что зазмер Х * Y не превышает 100019 * 100
Это откуда? В (0) ни слова про ограничения на Y. Общий смысл ограничения понятен. Есть лимит по памяти, и если хранить тупо в массиве или списке, то все точки туда не влезут. А нужно придумать что-то хитрее, чтобы влезли. Но вот детали пока ясны... |
|||
28
mistеr
10.08.18
✎
11:44
|
(27) *пока не ясны*
|
|||
29
Вафель
10.08.18
✎
11:52
|
(26) ну или бинарное дерево (индекс по 2м полям)
|
|||
30
NSSerg
10.08.18
✎
12:15
|
(27) Ограничения не на количество значений координаты Х, а на общее количество точек!
|
|||
31
DES
10.08.18
✎
12:15
|
там дальше в задании
В первой строке входных данных содержится число запросов п (1 < п < 105). В каждой из следующих п строк содержатся запросы. Запросы выполняются в том порядке, в котором они встречаются во входных данных. Разные запросы могут односиться к одной и той же точке (в частности, некоторые точки могут быть перекрашенными в процессе, см. пример). |
|||
32
DES
10.08.18
✎
12:16
|
т.е. N меньше 10 в пятой степени
|
|||
33
NSSerg
10.08.18
✎
12:16
|
(26) И вывалишься за ограничение.
10 миллионов значений, на каждое пара байт - это 20 мегабайт. |
|||
34
DES
10.08.18
✎
12:17
|
т.е. это кол-во запросов , которые есть или установить цвет точки или получить цвет точки. значить матрица можетбыть не более 100000 элементов
|
|||
35
NSSerg
10.08.18
✎
12:17
|
(31) Если запросов 10^5, то можно делать операции добавления и удаления за lnN, уложишься в таймлимит.
Ну и вообще в условии должны быть ограничения на x и у. |
|||
36
Cyberhawk
10.08.18
✎
12:18
|
Поясняю: дана двумерная система координат. Кусок плоскости пикселей, в любом месте которого пиксель имеет координату Х и У.
Этот кусок плоскости должен быть таким (такой формы), что в нем будет не более ста пикселей, координата Х которых кратна 100019. Т.е. это может быть: - вертикальный столбик из ста пикселей: каждый пиксель будет иметь одинаковую координату Х, но разную координату У - горизонтальный отрезок из 100019*100 пикселей и высоток один пиксель: у всех одинаковая координата У, и в нем будет сто пикселей, координата Х которых кратна тому числу 100019 - любой прямоугольный (?) участок между этими двумя "крайними формами" |
|||
37
DES
10.08.18
✎
12:18
|
есть только на х
|
|||
38
NSSerg
10.08.18
✎
12:19
|
(31) Полностью задание можешь выложить?
|
|||
39
Вафель
10.08.18
✎
12:20
|
(33) так не нужно же все хранить, только те что перекрасили
|
|||
40
NSSerg
10.08.18
✎
12:20
|
(37) Какое? Если х и y неограниченные, то на хранение координат одной точки может уйти больше 16 мегабайт.
|
|||
41
Cyberhawk
10.08.18
✎
12:20
|
Область вариантов скорее всего выглядит как экспонента.
Т.к. если после вертикального отрезка (высота 100 пикселей, ширина 1) увеличивать ширину, то высота сразу уменьшается пропорционально увеличению ширины |
|||
42
NSSerg
10.08.18
✎
12:21
|
(39) При любых начальных условиях, укладывающихся в ограничения, программа должна тратить не меньше 16 мегабайт памяти указанных в условии. Это основное условие всех подобных задач.
|
|||
43
NSSerg
10.08.18
✎
12:21
|
Я привел вариант при котором 16 мегабайт не хватит.
|
|||
44
Вафель
10.08.18
✎
12:23
|
эхх, далек я от олимпиадного программирования
|
|||
45
DES
10.08.18
✎
12:23
|
||||
46
NSSerg
10.08.18
✎
12:40
|
Там же написано - 0<=x,y<=10^9
|
|||
47
NSSerg
10.08.18
✎
12:41
|
Теперь, учитывая что запросов не больше чем 10^5, то и покрашенных точек не больше этого количества.
Оптимально - использование HashMap. |
|||
48
DES
10.08.18
✎
12:49
|
(46) точно, еще хуже.
|
|||
49
Garykom
гуру
10.08.18
✎
12:54
|
100 000 запросов на покраску точек, для каждого нужно сохранить еще 2 числа не более чем 1 000 000 000 и цвет R или B.
|
|||
50
Garykom
гуру
10.08.18
✎
13:00
|
(49)+ 400 килобайт хватит на все
|
|||
51
Garykom
гуру
10.08.18
✎
13:02
|
(50)+ сорри ошибся надо 800 килобайт
|
|||
52
NSSerg
10.08.18
✎
13:04
|
Понятно что по памяти легко укладывается, и по производительности (С любой структурой с скоростью доступа не хуже lnN)
(50) Число до 10^9 это уже 4 байта, две координаты это 8 байт, и один байт на хранение цвета (вообще бит, но пусть будет байт - проще организовать). Итого 9 байт на точку, 100000 точек. Это 900000 кбайт. Но и HashMap и Map тратят еще память на вспомогательные данные, но в 16 МБайт конечно в любом случае укладываешься. |
|||
53
Garykom
гуру
10.08.18
✎
13:06
|
(52) >Число до 10^9 это уже 4 байта,
неа 2^30 же хватит и еще аж 4 бита останутся для цвета с двух чисел |
|||
54
Garykom
гуру
10.08.18
✎
13:07
|
(52) Нахрена HashMap или Map когда обычного линейного массива хватит?
Какая разница что для определения текущего цвета точки будет цикл по 100 000 элементам массива? |
|||
55
Вафель
10.08.18
✎
13:08
|
(54) а ты успеешь за 1с покрасить 100тыщ точек?
|
|||
56
Garykom
гуру
10.08.18
✎
13:09
|
(55) Не покрасить а выполнить 100 000 запросов каждый из которых или на покраску или определение цвета
|
|||
57
Вафель
10.08.18
✎
13:11
|
(56) ну ты же не знаешь сколько и каких запросов
|
|||
58
Garykom
гуру
10.08.18
✎
13:11
|
(56)+ Это сильно зависит от тактовой частоты и накладных расходов на выполнение в реальной системе.
|
|||
59
RKx
10.08.18
✎
13:12
|
(55) Успею. Частота проца такая, какую я захочу:)
|
|||
60
Вафель
10.08.18
✎
13:12
|
(58) но тем не менее, если не уложишься то твое решение не примут
|
|||
61
Garykom
гуру
10.08.18
✎
13:13
|
(57) Там сказано ограничение на n (число запросов указанное в первой строке входных данных) 1<=n<=10^5
|
|||
62
Garykom
гуру
10.08.18
✎
13:14
|
Самая хреновая ситуация если все 100 000 запросов на определение цвета, будет 100 000 циклов по 100 000 строк массива.
Надо бы отдельно сохранить число выполненных запросов на покраску и цикл только по ним делать при определении цвета. |
|||
63
Вафель
10.08.18
✎
13:15
|
(62) а для покраски разве не нужно по массиву бежить? перекраска же возможна
|
|||
64
Garykom
гуру
10.08.18
✎
13:16
|
(63) Хехе не надо, при покраске просто в конец массива дописываем x,y,col
|
|||
65
Garykom
гуру
10.08.18
✎
13:16
|
(64)+ При определении цвета пробегаемся по всему массиву, если координаты встретили то запоминаем цвет, повторно встретили поменяли, если ни разу то цвет N
|
|||
66
Вафель
10.08.18
✎
13:16
|
(64) тогда для поиска тебе нужно будет каждый раз бежать до конца массива
|
|||
67
RKx
10.08.18
✎
13:18
|
"Изначально все точки плоскости считаются непокрашенными. "
Красные в массив х, синие - в y. Оставшиеся - в z. Всегда первыми проверяем самые короткие. Если в первых двух нет - точка в третьем. |
|||
68
Garykom
гуру
10.08.18
✎
13:18
|
(66) Не до конца массива а до кол-ва выполненных (записанных) запросов на покраску
|
|||
69
Garykom
гуру
10.08.18
✎
13:19
|
(67) Угу ускорение за счет большего выделения и использования памяти, у нас аж 16 мегабайт еще можно развернуться
|
|||
70
Garykom
гуру
10.08.18
✎
13:19
|
(69)+ Намек как делить массивы дан:
"*Известно, что размер любого множества точек, в котором совпадают остатки от деления координат х на 100019, не превосходит 100" |
|||
71
Garykom
гуру
10.08.18
✎
13:20
|
(70)+ Как понимаем поделить координату x на 1000019 и сравнить остаток это быстро
|
|||
72
NSSerg
10.08.18
✎
13:25
|
(54) С обычным массивом ты не укладываешься в таймлимит.
Потому что сложность алгоритма О(N^2) при N=10^5 это 10^10 операций, а успеть за секунду можно 10^7 |
|||
73
NSSerg
10.08.18
✎
13:27
|
(58) Могу еще раз посоветовать немного порешать задач на codeforces. Будешь лучше ориентироваться в сложности.
Твое решение с поиском каждый раз по массиву не укладывается по времени в 1000 раз. |
|||
74
Garykom
гуру
10.08.18
✎
13:29
|
(72) С одним возможно но массивов 100 и мы ищем цвет точки только в 1
|
|||
75
NSSerg
10.08.18
✎
13:29
|
(71) Еще раз повторюсь, можно успеть за секунду сделать 10^7 простейших операций. Если в условии 10^5 запросов, то сложность алгоритма должна быть не хуже NlnN
|
|||
76
Garykom
гуру
10.08.18
✎
13:31
|
(75) >за секунду сделать 10^7 простейших операций
Это уже зависит от частоты процессора |
|||
77
Garykom
гуру
10.08.18
✎
13:32
|
(76)+ И да 10^5 меньше чем 100^7
|
|||
78
Garykom
гуру
10.08.18
✎
13:32
|
(77) *10^5 меньше чем 10^7
|
|||
79
RKx
10.08.18
✎
13:34
|
Данные массива:
(КоординатаИгрек, КоординатаИкс, смещение, Цвет) Смещение - количество точек одного цвета |
|||
80
NSSerg
10.08.18
✎
13:34
|
(74) Ты пытаешься изобрести велосипед. Это совершенно шаблонная задача.
(76) Это простейшая задача спортивного программирования. Я кандидат в мастера (КМС) codeforces (До девальвации рейтингов был КМС-ом), ты ни разу не участвовал в спортивном программировании. Зачем ты споришь? |
|||
81
RKx
10.08.18
✎
13:34
|
+(79) Если один массив
|
|||
82
DES
10.08.18
✎
13:35
|
(80) в чем состоит шаблон этого типа задач?
|
|||
83
NSSerg
10.08.18
✎
13:35
|
(78) Тебе 10^5 раз нужно сделать операцию поиска точки в массиве. Посчитай сколько всего операций тебе нужно сделать.
|
|||
84
NSSerg
10.08.18
✎
13:36
|
(82) Это задача добавления и чтения значений. Обычная несложная стандартная задача. Решаемая при помощи HashMap.
|
|||
85
Garykom
гуру
10.08.18
✎
13:42
|
(83) Сделать максимум 10^5 раз в одном из 100 массивов по 1000 максимум элементов.
Еще расходы на операции по определению в каком из массивов искать. И да ты думаешь внутри HashMap что то отличающееся от обычных массивов? Там просто добавлены накладные расходы на перебор массива ссылок при добавлении записей, перебор всех записей (таблицы адресов) при получении значений никуда не девается )) |
|||
86
NSSerg
10.08.18
✎
13:45
|
(85) 10^5 раз просмотреть все элементы массива из 1000 значений. Это 10^5*1000 операций. 10^8. Вопрос - ты издеваешься? Говорю еще раз, стандарт спортивного программирования - 10^7 операций таймлимита.
|
|||
87
NSSerg
10.08.18
✎
13:46
|
(85) Поиск в обычном массиве из 1000 элементов это 1000 операций, в HashMap - это одна операций. Я не думаю, я знаю.
|
|||
88
Garykom
гуру
10.08.18
✎
13:47
|
(87) Хера се... Это какая то новая арифметика каких то квантовых процессоров?
|
|||
89
NSSerg
10.08.18
✎
13:47
|
В бинарном дереве это 10 операций (Map). В хеше одна операция. Уже вторая ветка подряд где ты советуешь пургу, при этом и в первый раз не понял что дождаться ответа твоего решения невозможно. Потому что и там был N^2.
|
|||
90
NSSerg
10.08.18
✎
13:50
|
(88) Блин. Ты что такое бинарное дерево знаешь? Понимаешь что в бинарном дереве поиск это десять операций?
https://ru.wikipedia.org/wiki/Хеш-таблица Вот описание Хеш таблицы. Исходя из хеша вычисляется адрес (одна операция), и по этому адресу лежит значение. Это в двух словах устройство хеш-таблицы. Если не понимаешь принцип жействия Хеш-таблиц, то можешь использовать бинарное дерево, в котором поиск не за Nопераций, а за Ln N - это "Map". Решение на Map тоже укладывается в лимит. |
|||
91
Garykom
гуру
10.08.18
✎
13:51
|
(89) http://korzh.net/wp-content/uploads/2010/11/image008.gif - четкая зависимость кол-ва операция от количества объектов внутри - перебор же ))
В задаче не сказано что можно использовать готовый HashMap. Ты предлагаешь его реализовать вручную? На чем? На массивах? Вперед и заодно покажешь что не гонишь пургу. |
|||
92
Garykom
гуру
10.08.18
✎
13:52
|
(90) В бинарном дереве поиск это не 10 операций а зависит от его размера
|
|||
93
NSSerg
10.08.18
✎
13:53
|
(92) Это 10 операция для 1000 элементов! Жесть просто. Я тебе же пишу что это О(lnN), ты понимаешь что N - это и есть размер массива?
|
|||
94
Garykom
гуру
10.08.18
✎
13:54
|
(93) Ты только что выше писал "в HashMap - это одна операций. Я не думаю, я знаю." соврал?
|
|||
95
NSSerg
10.08.18
✎
13:55
|
(94) Ты понимаешь что HashMap это не бинарное дерево, в нем не О(LnN), а О(1)?
|
|||
96
Garykom
гуру
10.08.18
✎
13:55
|
По сути я как раз и предлагаю реализовать хеш-таблицу вручную, разбив данные по нескольким массивам, не хватает 100 массивов? Сделаем 1000 или 10 000
|
|||
97
NSSerg
10.08.18
✎
13:56
|
||||
98
Garykom
гуру
10.08.18
✎
13:57
|
(97) Прикинь я это читал. И даже понимаю что мое предложение это и есть хеш-таблица, точнее некая реализация нечто похожего.
|
|||
99
NSSerg
10.08.18
✎
13:58
|
(96) Ты изобретаешь велосипед. HashMap, Map - Это готовые структуры, которые нужно уметь использовать в спортивном программировании. А в (0) как раз задача спортивного программирования.
Еще раз Map - бинарное дерево, операции добавления, поиска выполняются за О(LnN). HashMap - хеш-таблица, операции жбавления и поиска выполняются за О(1) |
|||
100
Garykom
гуру
10.08.18
✎
14:04
|
"МL=16 мегабайт
Лимит по памяти важен. Далеко не все интерпретируемые языки смогут запустить интерпретатор в этих ограничениях. Выбирайте инструмент в соответствии с задачей" Покажи мне интерпретатор имеющий на борту HashMap и работающий в этих ограничениях в 16 Mb RAM ? |
|||
101
NSSerg
10.08.18
✎
14:08
|
(100) Это обычная фраза задач спортивного программирования.
Когда ты отсылаешь решения, сервер контролирует сколько памяти ты используешь. https://codeforces.com/problemset Не поленись, открой любую задачу. Обязательные атрибуты задачи // ограничение по времени на тест: ограничение по памяти на тест: |
|||
102
Garykom
гуру
10.08.18
✎
14:10
|
Это не ответ - это посылание на некий сайт не имеющий никакого прямого отношения к задаче из (0)
|
|||
103
Garykom
гуру
10.08.18
✎
14:13
|
>Ты изобретаешь велосипед. HashMap, Map - Это готовые структуры, которые нужно уметь использовать в спортивном программировании.
Твоя позиция очень похожа на: Нет готового "HashMap"? Это не моя проблема я участвую только в "спортивном программировании" |
|||
104
NSSerg
10.08.18
✎
14:15
|
(103) Я умею реализовать и HashMap и Map.
|
|||
105
Garykom
гуру
10.08.18
✎
14:17
|
(104) Так блин дана готовая хеш-функция
"Известно, что размер любого множества точек, в котором совпадают остатки от деления координат х на 100019, не превосходит 100" |
|||
106
NSSerg
10.08.18
✎
14:18
|
(102) Еще раз - это задача спортивного программирования, поэтому там указан лимит по памяти и по времени. Не более того.
Я тебя отсылаю на сайт, потому что походу ты из лимита по памяти построил странную теорию, из которой следует что нельзя использовать HashMap. А я тебе говорю что это обычное условие задач спортивного программирования. И никакого отношения к запрету HashMap или использованию неких слабых и старых интерпретаторов или компиляторов оно не имеет. |
|||
107
Garykom
гуру
10.08.18
✎
14:21
|
(105)+ Эээ гм не 100 массивов а хз скоко массивов из максимум 100 элементов
|
|||
108
NSSerg
10.08.18
✎
14:26
|
В принципе не принято в спортивном (и не только) программировании решать за О(N^2) задачи которые решаются за О(NlnN). Если это задача на собеседовании - то тебя просто не возьмут на работу.
|
|||
109
Garykom
гуру
10.08.18
✎
14:28
|
(108) 10^5 * 100 = ?
укладываемся же! |
|||
110
NSSerg
10.08.18
✎
14:35
|
(107) Задача в (0) появилась ведь не просто так? А служит для проверки понимания что такое сложность алгоритма. В принципе все задачи спортивного программирования именно это в том числе и проверяют. Ты своим решением хочешь показать что? Что ты не знаешь как эту задачу можно решить за NlnN, а умеешь только за N^2?
Когда будет 10^7 запросов, ты полностью перепишешь решение, чтоб уложиться в 50 секунд? |
|||
111
Garykom
гуру
10.08.18
✎
14:36
|
(110) Хочешь сказать что это строчка про "...не превосходит 100" в задаче лишняя?
И не подразумевает использование этих знаний например для ручного хеширования? |
|||
112
NSSerg
10.08.18
✎
14:40
|
(111) Лишняя. Считай что она нужна только для того чтоб запутать.
Кстати, то что ты предлагаешь, разделение массива на множество поменьше - это ну никак не Hash таблица, а больше похоже на sqrt-декомпозицию. |
|||
113
Garykom
гуру
10.08.18
✎
14:42
|
(112) "sqrt-декомпозиция" - тут и близко не стояла это из какой то совсем другой оперы
|
|||
114
NSSerg
10.08.18
✎
14:43
|
Это условие добавляет возможность сделать более простое но и более плохое решение. Бывает такое что задача имеет несколько решений, и в зависимости от качества (память, сложность, скорость) решения дается разное количество баллов.
|
|||
115
Garykom
гуру
10.08.18
✎
14:43
|
(113)+ Точнее общее только разбиение (но при хеш-функциях это же и происходит) на примерно равные множества, но никаких сумм не надо считать
|
|||
116
NSSerg
10.08.18
✎
14:44
|
(113) sqrt-декомпозиция, это когда для того чтоб быстрее искать, мы по некоторому признаку массив из N элементов делим на много массивов. Примерно Корень из N массивов по корень из N элементов.
А Хеш таблица классическая работает на списках, а не как массив массивов. |
|||
117
NSSerg
10.08.18
✎
14:47
|
(115) Только что, в (87), ты говорил что не существует структуры с поиском за константное время, а теперь уже стал знатоком хеш-таблиц? :)
|
|||
118
Garykom
гуру
10.08.18
✎
14:50
|
(117) любая хеш таблица реализована или на массивах или на списках
Список это частный случай массива когда колво элементов заранее неизвестно В данной задаче макс колво известно отсюда какой вывод? |
|||
119
Garykom
гуру
10.08.18
✎
14:51
|
(118)+ решать задачу через массивы возможно оптимальнее пусть и сложнее но работать будет быстрее и точнее лимиты на память
|
|||
120
Garykom
гуру
10.08.18
✎
14:53
|
(117) обход списка затратнее чем обход массива
|
|||
121
NSSerg
10.08.18
✎
14:56
|
(120) Хеш таблицы не делаются на массивах (точнее делаются, но только когда нам не обязательно избегать коллизий), потому что тогда по каждому адресу тебе нужно держать массив размером на максимальную длину цепочки, на это никакой памяти не хватит.
|
|||
122
Garykom
гуру
10.08.18
✎
14:58
|
(121) Если известна максимальная длина цепочки как в данной задаче то?
|
|||
123
NSSerg
10.08.18
✎
14:59
|
(119) Очередная жесть. Решение за (О(N^2)) оптимальнее чем О(nLnN)? Потому что всегда будет медленней?
Ты разберись со сложностью алгоритма. Что это такое. Решение на HashMap - это решение за О(N). 10^5 операций. Решение на Map - это решение за 2*10^6 операций. А твое решение мало того что медленнее, еще и не рабочее. |
|||
124
Garykom
гуру
10.08.18
✎
15:01
|
(123) Зачем перебирать каждый массив до конца?
Когда можно хранить кол-во заполненных элементов в каждом и цикл только до него. |
|||
125
Garykom
гуру
10.08.18
✎
15:04
|
Судя по чисто нашему диалогу (без участия других) остальные или уже нифига не понимают или им неинтересно ))
|
|||
126
NSSerg
10.08.18
✎
15:05
|
(122) Сколько ты собираешься завести массивов из 100 элементов? 10^5? Опиши еще раз структуру (массивы) которая будет работать не за 10^10 операций, и влезет в память по условию.
(124) Ты точно знаешь что такое сложность алгоритма? |
|||
127
NSSerg
10.08.18
✎
15:05
|
(125) Судя по нашему диалогу - ты ничего не понимаешь. :)
|
|||
128
Garykom
гуру
10.08.18
✎
15:06
|
(126) Завести собираюсь ровно 1000 массивов по 100 элементов
|
|||
129
Garykom
гуру
10.08.18
✎
15:07
|
(127) Блин я прекрасно понимаю твое решение и свое решение. Ты понимаешь только свое. И?
|
|||
130
Garykom
гуру
10.08.18
✎
15:07
|
(128)+ Еще 1000 целых чисел - кол-во заполненных элементов в каждом из 1000 массивов
|
|||
131
Garykom
гуру
10.08.18
✎
15:08
|
(130)+ Естественно в отдельном массиве из 1000 элементов а не 1000 переменных ))
|
|||
132
NSSerg
10.08.18
✎
15:08
|
(128) И по какому признаку ты будешь решать в какой из 100 массивов писать свою пару координат?
|
|||
133
Garykom
гуру
10.08.18
✎
15:09
|
(132) "совпадают остатки от деления координат х на 100019"
|
|||
134
Garykom
гуру
10.08.18
✎
15:10
|
(132) Из 1000 массивов
|
|||
135
NSSerg
10.08.18
✎
15:15
|
(133) (134)
Еще раз. Вот у тебя x и y Напиши функцию от x и y - которая возвращает число в интервале от 1 до 1000, массив в который ты будешь писать значение цвета по этой координате. В (133) Ты написал строчку из условия, а не описал свой алгоритм. |
|||
136
NSSerg
10.08.18
✎
15:17
|
(133) У всех 10^5 пар допустим разные остатки от деления. От 1 до 100000.
|
|||
137
NSSerg
10.08.18
✎
15:21
|
Пары точек x,y
1,1 2,2 и т.д. до 10^5, 10^5 В какой массив попадет каждая из точек? Ты наверно хочешь сказать что ты сделаешь 100019 массивов по 100 значений. Но тогда ты не влезаешь по памяти. |
|||
138
Garykom
гуру
10.08.18
✎
15:29
|
(137) Об этом я еще не подумал, хз как доказать что будет всего 1000 массивов и/или какую еще хеш-функцию придумать чтоб объединить массивы <100 элементов
когда x от 1 до 1000000000 |
|||
139
Garykom
гуру
10.08.18
✎
15:31
|
(137) точек всего 10^5 так что 19 массивов точно лишние
|
|||
140
NSSerg
10.08.18
✎
15:38
|
(139) И как ты до того как получил значение этих 10^5 точек узнаешь какие из массивов лишние? Ты же вроде хочешь сразу объявить двумерный массив. Или это какие-то хитрые массивы, которым можно присваивать индекс в потоке?
|
|||
141
NSSerg
10.08.18
✎
15:39
|
Я так понял, что ты теперь понимаешь что твое решение не укладывается по памяти?
|
|||
142
Garykom
гуру
10.08.18
✎
15:40
|
(140) Одного массива 10^5*100 разве не хватит?
|
|||
143
Garykom
гуру
10.08.18
✎
15:41
|
(142)+ Двумерный массив 100000 на 100
|
|||
144
NSSerg
10.08.18
✎
15:44
|
(143) И какие у тебя будут исключены остатки по модулю 100019 при заведении массива?
Вот у тебя в потоке первая точка 1,100 Вторая 100019,100 // В какой элемент массива ты запишешь первую, в какой вторую? // 10^5*100*8 байт (две координаты, х и y, каждая по 4 байта) это 80 мегабайт. |
|||
145
Garykom
гуру
10.08.18
✎
15:46
|
(144) Входной поток он линейный с последовательным чтением или можно возвращаться к старым элементам но номеру?
|
|||
146
NSSerg
10.08.18
✎
15:48
|
(145) Допустим можно возвращаться.
|
|||
147
Lama12
10.08.18
✎
15:48
|
(23) Спасибо за поправку. Век живи, век учись.
Ну вы монстры... Дочитал до сюда. Вроде понимаю о чем говорите, но блин так это далеко и давно было. И "по кусочкам"... Вот ТС куда-то слился. |
|||
148
Garykom
гуру
10.08.18
✎
15:48
|
(144) Хм делаем массив 100019 х 100 и x координата задается остатком от деления, внутри храним в 100 элементах только y координату
|
|||
149
Garykom
гуру
10.08.18
✎
15:51
|
(148)+ не влазит 40 мегабайт будет ((
|
|||
150
NSSerg
10.08.18
✎
15:52
|
(148) И как ты отличишь две разные точки, с разным x, но с одинаковым остатком от деления на 100019?
|
|||
151
Garykom
гуру
10.08.18
✎
15:52
|
(149)+ Но если можно возвращаться (146) то хранить можно не значение y координаты а номер точки из входных данных
|
|||
152
Garykom
гуру
10.08.18
✎
15:53
|
(150) Они рядом будут записаны в 100, их порядковым номером (151)
|
|||
153
NSSerg
10.08.18
✎
15:54
|
(151) Как, ииз какой структуры ты будешь получать номер точки?
Вот у тебя пара запросов на изменение цвкта точки, и один чтение. Тебе каждый раз после первой записи нужно точно определить "порядковый номер точки". Как ты это сделаешь? Хеш-таблицей? Map? :) |
|||
154
NSSerg
10.08.18
✎
15:57
|
+ (153) Три раза встретилась одна и та-же точка, как ты узнаешь что это одна и та-же точка, если ты не хранишь её координату?
|
|||
155
Garykom
гуру
10.08.18
✎
16:03
|
(154) Чем то напоминает задачку на сжатие данных, координаты у нас до 10^9 но точек всего 10^5 можно составить "словарик допустимых координат"
Ответ же нам нужен только цвет R, B или N координату не надо возвращать - их можно не хранить. Провести при чтении некую замену координат где будет подмена порядкового номера точки встретившегося позднее на самый первый номер этой же точки (с этими же координатами). |
|||
156
Cyberhawk
10.08.18
✎
16:08
|
"координаты у нас до 10^9" // Орицательные тоже могут быть. Т.е. координата по У ограничена только сверху, а по Х - только слева (больше нуля, типа). Плюс есть ограничение на размер области по высоте и ширине, описанные мною ранее
|
|||
157
Garykom
гуру
10.08.18
✎
16:09
|
(156) 0 <= x,y <= 10^9
https://prnt.sc/kgyyos |
|||
158
Cyberhawk
10.08.18
✎
16:11
|
И Я про то же. Не ясно, зачем ты это написал.
|
|||
159
Garykom
гуру
10.08.18
✎
16:11
|
(158) Не может быть отрицательных координат x или y
|
|||
160
NSSerg
10.08.18
✎
16:12
|
(155) Ты понимаешь что элементарную задачу, которая решается начинающим программистом, джуниором - минут за 5 - ты превратил невесть в что, и до сих пор не выдал рабочего решения укладывающегося в лимиты?
Когда есть решение в ветке за О(N), на hashMap, и понятно что при N элементах в потоке - решения с лучшей асимптотикой быть не может. Так как на чтение из потока нужно О(N) операций. (156) В условии написано: 0<=x,y<=10^9 Эта запись означает что обе координаты меньше либо равны 10^9, и обе больше либо равны нулю. |
|||
161
Cyberhawk
10.08.18
✎
16:13
|
(159) (160) Это одна из двух возможных трактовок
|
|||
162
Garykom
гуру
10.08.18
✎
16:16
|
(160) Для решения на hashMap, ты ключом что будешь делать?
Сколько будет операций при добавлении новых значений в 10^5 HashMap или получении значения оттуда? Число 10 операций откуда взялось? |
|||
163
NSSerg
10.08.18
✎
16:25
|
(162) 10 это двоичный логарифм от 1000. К hashmap это не имеет никакого значения. Это количество операций для поиска и добавления значения в "map" (бинарное дерево) с 1000 элементами.
// В HashMap добавление и чтение это О(1) - константа. Одна операция. Для добавления 10^5 значений в HashMap потребуется 10^5 (О(10^5)) операций. |
|||
164
Garykom
гуру
10.08.18
✎
16:25
|
(162)+ Ключ (x+y) записываем в 8 байт, еще 1 байт для цвета.
Макс элементов 10^5 итого 10^5 * 9 = 900 килобайт. Но не учитываются накладные расходы на хранение списка ключей и списка значений, а они для 10^5 элементов будут немаленькие. https://habr.com/post/159557/ |
|||
165
Garykom
гуру
10.08.18
✎
16:26
|
(163) >В HashMap добавление и чтение это О(1) - константа. Одна операция.
Офигеть а за сколько времени выполняется эта одна операция в мс? |
|||
166
Garykom
гуру
10.08.18
✎
16:29
|
(165) Я выше приводил картинку где есть размеры коллекций и быстродействие
|
|||
167
Garykom
гуру
10.08.18
✎
16:29
|
||||
168
NSSerg
10.08.18
✎
16:33
|
(165) Неважно. Там константа конечно больше чем в map, но не на много.
Около 10^-6 сек. (166) И что ты понял из этой картинки? Что реализация HashMap не очень хорошая, и сложность конечно заметно меньше логарифма, но чуть хуже чем О(1)? А хорошая реализация в LinkedHash? Ну и что? |
|||
169
NSSerg
10.08.18
✎
16:35
|
До 50000 элементов , а это и есть почти 10^5, как и есть в условии - скорость доступа 1микросекунда, 10^-6. Зависимость становится чуть хуже чем константа на намного больших размерах.
|
|||
170
NSSerg
10.08.18
✎
16:39
|
(164) Немаленькие это в 20 раз больше, или максимум в два раза больше? По условию у нас лимит до 15 мегабайт.
(162) Это очень странный вопрос. Конечно typedef pair<uint, uint> Key; |
|||
171
NSSerg
10.08.18
✎
16:46
|
Всё было описано выше. На хранение каждой точки нужно 9 байт. Итого потребуется 900 килобайт, ну и естественно плюс накладные расходы. Допустим даже в 10 раз больше. Все-равно укладываемся.
Не укладываешься - так поменяй в коде hashmap на map, делов то. Будет чуть медленней, на логарифм, но места будет занимать меньше. |
|||
172
Garykom
гуру
10.08.18
✎
16:52
|
(171) Угу 3 мегабайта накладных расходов примерно
|
|||
173
Digger
10.08.18
✎
17:25
|
(147) +1
Почитал, как будто снова окунулся в детство. Все это было, но блин так давно. Чувствую уже давно стал "не программистом", совсем мозг заплыл адинэсом. ) |
|||
174
NSSerg
10.08.18
✎
17:36
|
#include <iostream>
#include <algorithm> #include <unordered_map> using namespace std; typedef pair<unsigned int, unsigned int> Key; struct pair_hash { template <class T1, class T2> std::size_t operator () (const pair<T1,T2> &p) const { auto h1 = hash<T1>{}(p.first); auto h2 = hash<T2>{}(p.second); return h1 ^ h2; } }; int main() { std::ios::sync_with_stdio(false); unordered_map <Key,char,pair_hash> a; int n; int op; unsigned int x,y; char c; cin >> n; for(int i=0;i<n;i++) { cin >> op >> x >> y; if (op==1) { cin >> c; a[make_pair(x,y)]=c;} else { auto f=a.find(make_pair(x,y)); if (f==a.end()) cout << 'N'; else cout << f->second << "\n"; } } cout.flush(); return 0; } Вот код, если не нравятся Хеш-таблицы, достаточно unordered_map поменять на map |
|||
175
NSSerg
10.08.18
✎
21:39
|
виноват, косяк, забыл перевод строки, в тестовом примере ‘N’ в последней строке, поэтому глюк не заметил
auto f=a.find(make_pair(x,y)); if (f==a.end()) cout << 'N' << "\n"; else cout << f->second << "\n"; |
|||
176
DES
10.08.18
✎
22:16
|
это на каком ЯП??
|
|||
177
NSSerg
10.08.18
✎
22:18
|
(176) C++
можешь проверить на любом онлайн компиляторе. Я так и проверял на тех входных данных которые на твоем скриншоте задания. могу написать на другом ЯП. На каком надо? |
|||
178
Cyberhawk
10.08.18
✎
22:20
|
(177) На 1С давай, чтоб всем понятно было )
|
|||
179
NSSerg
10.08.18
✎
22:25
|
(178) на 1с слишком просто.
только условие не выполнить, 1с не умеет читать из консольного ввода. |
|||
180
Lama12
10.08.18
✎
22:41
|
(176) Извиняюсь, а точно имеет смысл абитура?
Конечно ИМХО, но С++ хорошо бы знать в лицо. Очень рекомендую. |
|||
181
DES
11.08.18
✎
08:44
|
(177) на с
|
|||
182
DES
11.08.18
✎
08:46
|
(177) и еще …
в задании указаны условия, нужно ли в решения делать проверку условий или условия указаны для понимания объема данных и ресурсов |
|||
183
NSSerg
11.08.18
✎
08:52
|
(182) нет, проверку делать не надо. все условия написаны для того чтоб понимать что может быть во входном потоке.
код на C++11, он немного ускоряет написание по сравнению с чистым C++ |
|||
184
DES
11.08.18
✎
09:05
|
нужен чистый классический С
|
|||
185
DES
11.08.18
✎
09:07
|
(179) 1с умеет же читать с консоли
ВвестиЧисло |
|||
186
NSSerg
11.08.18
✎
09:21
|
(185) это не то :)
вечером, освобожусь, напишу на си задачу можно решить без использования индексов, бинарных деревьев и хеша, на списках. заводим массив на 100019 элементов, в который пишем ссылку в списке на первую точку с заданным остатком от деления x на 100019. а в списке (общем для всех точек) с каждой точкой хранится ссылка на следующую точку с таким же остатком от деления. итого у нас на поиск каждой точки уйдет не больше 100 операций. И в лимит по памяти легко уложились. |
|||
187
DES
11.08.18
✎
09:43
|
т.е. мы вычислили что объем массива не более 100019 ?
|
|||
188
DES
11.08.18
✎
09:44
|
я не понял в чем фишка остатка от деления. что это определяет?
|
|||
189
NSSerg
11.08.18
✎
10:17
|
(187) В условии написано что таких чисел не больше ста.
У нас есть точка с координатой x,y Если мы будем искать её в нашей структуре только среди точке с остатком отделения x на 100019 таким-же как и у текущей точки, то потратим на это не более 100 операций, потребуется перебрать не больше 100 точке. Структуры для хранения две. Первая - массив на 100019 элементов, по два байта на значение - ссылка на первый элемент с заданным остаток от деления в списке. Вторая - связный список, на N+1 элементов (максимум на 100001). Для удобства нулевой элемент использовать не будем, 0 - это будет пустая ссылка. В котором хранятся координаты x и y (8 байт), цвет (1 байт), и ссылка на следующий номер элемента в этом массиве с таким-же остатком от деления x на 1000019 (2 байта) Итого 100001*11+100019*2 байт, чуть больше мегабайта. Связный список сделаем на массиве - для скорости. Чтоб не выделять память по одному элементу. |
|||
190
NSSerg
11.08.18
✎
10:23
|
+(189) То есть мы по сути реализуем хеш-таблицу, где в качестве хеша используется остаток от деления координаты x на 100019. Как и хотел Garykom, но у него что-то не получилось :)
|
|||
191
NSSerg
11.08.18
✎
10:46
|
Виноват, все ссылки по 4 байта.
|
|||
192
NSSerg
11.08.18
✎
12:39
|
#define size 100019
#define maxN 100001 #include <stdio.h> #include <stdlib.h> typedef unsigned long int UINT; typedef struct node { UINT x,y,next; char c; }; struct node List[maxN]; UINT Hash[size]; UINT ListN=0; char QUERY(UINT x, UINT y) { UINT p=Hash[x%size]; while (p!=0) { struct node Node=List[p]; if ((Node.x==x)&&(Node.y==y)) return Node.c; p=Node.next; } return 'N'; } void PAINT(UINT x, UINT y, char col) { UINT p=Hash[x%size]; while (p!=0) { if ((List[p].x==x)&&(List[p].y==y)) { List[p].c=col; return; } p=List[p].next; } List[++ListN].x=x; List[ListN].y=y; List[ListN].c=col; List[ListN].next=Hash[x%size]; Hash[x%size]=ListN; } int main() { int i; for (i=0; i<size; i++) Hash[i]=0; int n; scanf("%d",&n); UINT op,x,y; char c; for (i=0; i<n; i++) { scanf("%lu%lu%lu",&op,&x,&y); if (op==1) { do { scanf("%c",&c); } while ((c!='R')&&(c!='B')); PAINT(x,y,c); } else printf("%c\n",QUERY(x,y)); } return 0; } |
|||
193
NSSerg
11.08.18
✎
12:42
|
#define size 100019
#define maxN 100001 #include <stdio.h> #include <stdlib.h> typedef unsigned long int UINT; typedef struct node { UINT x,y,next; char c; }; struct node List[maxN]; UINT Hash[size]; UINT ListN=0; char QUERY(UINT x, UINT y) { UINT p=Hash[x%size]; while (p!=0) { if ((List[p].x==x)&&(List[p].y==y)) return List[p].c; p=List[p].next; } return 'N'; } void PAINT(UINT x, UINT y, char col) { UINT p=Hash[x%size]; while (p!=0) { if ((List[p].x==x)&&(List[p].y==y)) { List[p].c=col; return; } p=List[p].next; } List[++ListN].x=x; List[ListN].y=y; List[ListN].c=col; List[ListN].next=Hash[x%size]; Hash[x%size]=ListN; } int main() { int i; for (i=0; i<size; i++) Hash[i]=0; int n; scanf("%d",&n); UINT op,x,y; char c; for (i=0; i<n; i++) { scanf("%lu%lu%lu",&op,&x,&y); if (op==1) { do { scanf("%c",&c); } while ((c!='R')&&(c!='B')); PAINT(x,y,c); } else printf("%c\n",QUERY(x,y)); } return 0; } Так единообразней. По сути это реализация простейшей Хеш-таблицы. |
|||
194
NSSerg
11.08.18
✎
14:07
|
В typedef struct node - typedef лишнее. Нужно писать
typedef unsigned long int UINT; struct node { UINT x,y,next; char c; }; struct node List[maxN]; |
|||
195
kyvv
11.08.18
✎
17:03
|
ТС ты не одинок, но я не поступаю :)
"Известно, что размер любого множества точек, в котором совпадают остатки от деления координат х на 100019, не превосходит 100" ...множество(из пар х и у), в котором совпадают остатки от деления координат х на const = 100019 (x1/const=xN/const). Или хто там должЁн совпасть? |
|||
196
kyvv
11.08.18
✎
17:27
|
NSSerg слился, ...
|
|||
197
kyvv
11.08.18
✎
17:59
|
Да и фиг с ней.
|
|||
198
NSSerg
11.08.18
✎
18:07
|
(196) в смысле?
|
|||
199
kyvv
11.08.18
✎
18:26
|
(198) из ветки. Понятно, что мастера тупняки достали.
|
|||
200
NSSerg
11.08.18
✎
18:29
|
(177) на вход подаются в том числе запросы на добавление точек, с координатами (x,y)
И разных точек, но при этом с одинаковым x%100019 - не может быть больше ста. |
|||
201
DES
11.08.18
✎
19:16
|
а вы видели пример входящих данных? там х далеко не 100019
|
|||
202
NSSerg
11.08.18
✎
19:53
|
(201) Это к чему?
|
|||
203
NSSerg
11.08.18
✎
20:04
|
(201) Если вам там учиться, и уже сейчас дают задачи уровня "В"-"C", то такие задачи в любом случае придется учиться решать.
Чтоб не было непоняток с условиями, не было далеко идущих выводов из тестовых примеров, нужно просто зарегистрироваться на codeforces.ru и начать решать задачи, например начиная с тех, которые решило большее количество участников. https://codeforces.com/problemset?order=BY_SOLVED_DESC Практически сразу станет проще ориентироваться в подобного рода заданиях. Значение имеют только условия. Тестовый пример в условии всегда простой, и не покрывает всех возможных случаев. Только даже если бы в примере было x=100019 - что это меняет? Условие то осталось прежним. |
|||
204
kyvv
11.08.18
✎
21:17
|
(200) С делением по модулю и совпадениями понял, хоть это было и не мне. Это как-то влияет на множество точек плоскости для раскраски?
|
|||
205
NSSerg
11.08.18
✎
21:25
|
(204) Если мы формируем списки по точкам с заданным x%100019, то мы можем быть уверенны что влезем в TL.
Каждую точку мы ищем пробегаясь по списку из уже добавленных точек с фиксированным x%100019, а список не более чем из 100 точек по условию. Всего запросов максимально 10^5 из условия. Всего максимальное количество операций получается равно количество запросов помноженное на максимальное количество операций в каждом запросе, это 100 операций. Итого 10^5*100=10^7 операций. Точно уложимся. |
|||
206
NSSerg
11.08.18
✎
21:38
|
(204) Это не деление по модулю, это остаток от деления.
|
|||
207
NSSerg
11.08.18
✎
21:43
|
(206) Хотя ладно, это почти одно и то же :)
|
|||
208
kyvv
11.08.18
✎
21:45
|
Что-то не увидел в условии, что нет множеств точек, в которых не совпадают остатки от деления координат х на 100019
|
|||
209
kyvv
11.08.18
✎
21:56
|
(0) Что есть абитура?
|
|||
210
NSSerg
11.08.18
✎
22:04
|
(208) "Известно, что размер любого множества точек, в котором совпадают остатки от деления координат х на 100019, не превосходит 100."
Код в (193), при каждом запросе - ищет только среди точек с совпадающим x%100019 с искомой точкой. А по условию таких точек не больше 100. Если бы их было не больше 10000, то при некоторых наборах исходных данных код бы не укладывался в таймлимит. Но их не больше 100, и это дает возможность использовать x%100019 как значение хеш функции, и гарантирует что цепочка значений не будет превышать 100 элементов. |
|||
211
kyvv
11.08.18
✎
22:04
|
(205) В условии вроде бы про размер интерпретатора?
|
|||
212
NSSerg
11.08.18
✎
22:05
|
(211) В условии, как и в любой другой задаче спортивного программирования - про ограничения на время, и на память.
|
|||
213
NSSerg
11.08.18
✎
22:08
|
TL - таймлимит.
ML - меморилимит. Накладывает ограничения на алгоритмы, чтоб не прошли медленные и требующие большого количества памяти решения. Данное ограничение отсекает все решения за О(N^2), и простые решения требующие огромного числа памяти. |
|||
214
kyvv
11.08.18
✎
22:11
|
(212 Лимит по памяти важен. Далеко не все интерпретируемые языки смогут запустить интерпретатор в этих ограничениях. Выбирайте инструмент в соответствии с задачей. Это разве о данных? Как вы time вычисляете?
|
|||
215
DES
11.08.18
✎
22:12
|
СПС
|
|||
216
NSSerg
11.08.18
✎
22:17
|
(214) Есть общепринятые стандарты количества простых операций которые можно выполнить в одну секунду. Это порядка 10^7, максимум 5*10^8
Чтоб его прочувствовать самостоятельно, достаточно (203) Как и везде там автоматическая проверка, и выводит и время вычисления, и израсходованную память, и TL или ML если превысил. То есть любой человек с достаточным опытом решения задач спортивного программирования - понимает сколько операций влезет в TL. А чтоб проверить память - достаточно sizeof, посмотреть в диспетчере задач, либо просто уметь её вычислять. |
|||
217
NSSerg
11.08.18
✎
23:49
|
Яндекс проводит чемпионат по программированию
В этой ветке немного есть про термины и суть подобных задач. |
|||
218
Mort
12.08.18
✎
00:56
|
Короче делаем так.
1. Берем пример одного прекрасного узкоспециализированного решения. 2. Формулируем его в задачу. 3. Т.к. без трудностей с которым пришлось столкнутся гению из (1) задача решается на раз-два, дополняем её тупыми условиями. 4. Готово! Можно запускать. Такая херня через раз встречается на собеседованиях. Особенно если вас собеседует тот самый гений из (1). А задача - говно. |
|||
219
NSSerg
12.08.18
✎
01:46
|
(218) Если ты хочешь стать алгоритмистом-программистом, то должен уметь пользоваться инструментами для проверки качества решения, и уметь решать типовые задачи. Любой студент современный на прикладной математике и информатике и подобных специальностях - должен щелкать такие задачи как орешки, учитывая что она в лоб на map или hashmap решается за несколько минут.
Подобные задачи решают и в вузах, и на собеседованиях на должности где требуется алгоритмика в любой серьезной компании. Ну и что-то мне подсказывает что они знают как выявлять способности и познания в алгоритмике. Яндекс например проводит (217) по результатам которого приглашает на работу. На собеседованиях у них я таких задач не видел, но попросить написать реализацию хеш-таблицы они на собеседовании вполне могут. А что не так с задачей - я в упор не понимаю. Обычная задача на алгоритмику. |
|||
220
NSSerg
12.08.18
✎
02:14
|
Соревнования по спортивному программированию для отбора программистов устраивают все крупные компании. Google Code Jam, Facebook Hacker Cup, Mail Code Cup (не путать с AI CUP), Яндекс Алгоритм, VK Cup и т.д.
Им нужны специалисты с хорошей алгоритмикой. Ну и вузы по специальности "прикладная математика и информатика" готовят именно специалистов умеющих решать подобные задачи, потому что это востребовано рынком. А в (0) несложная конечно, но хорошая алгоритмическая задача. |
|||
221
Mort
12.08.18
✎
02:37
|
(219) Да-да-да. Целый вагон окружения в котором ты чо-то должен. Илита. Илита по лекалам.
|
|||
222
Mort
12.08.18
✎
02:38
|
И эти люди рассказывают про выпуск школы квадратноголовых.
|
|||
223
Mort
12.08.18
✎
02:41
|
Бля, задача в (0) это ссылка на конкретный курс и на конкретный его параграф. Она не оставляет пространства мысли. Тупой зубреж. Я наслушался таких в акамедии, хорош.
|
|||
224
Mort
12.08.18
✎
02:44
|
Лимит по памяти важен. Далеко не все интерпретируемые языки смогут запустить интерпретатор в этих ограничениях. Выбирайте инструмент в соответствии с задачей
Охеренное условие. А Билл говорил, что хватит 640мб. Или блин важнее решить на память а не на скорость. Чо за г-но? |
|||
225
kyvv
12.08.18
✎
09:30
|
(220, 223) Если я правильно понял, то такие задачи - типичные для вузовской подготовки. Ну, не дает мне покоя вопрос, а куда это тс поступает? Неужели в аспирантуру?
|
|||
226
NSSerg
12.08.18
✎
09:54
|
(224) там условие и по времени и по памяти. Как у любой подобной задачи.
|
|||
227
NSSerg
12.08.18
✎
10:01
|
(221) Да-да-да! Только 1Сники знают как правильно готовить программистов, и какие знания навыки требуются гуглам-яндексам. Я бы на твоем месте предложил им свои услуги по правильному подбору персонала. Ведь тогда они и сами озолотятся, и тебя озолотят.
(223) Зубреж? Академии? Ничего что спортивные программисты выигрывают совревнования по промышленному программированию, на конкретных реальных задачах. Ну и простой вопрос - ты на полном серьезе думаешь что олимпиадники это зубрежники? Второе название спортивного программирования - олимпиадное программирование. Олимпиады - школьные, студенческие - это соревнования именно по спортивному программированию. |
|||
228
NSSerg
12.08.18
✎
10:07
|
(225) И для школьной.
Вот задачи всеросса ВОШ по информатике. https://neerc.ifmo.ru/school/archive/2017-2018.html#roi В самом низу https://neerc.ifmo.ru/school/archive/2017-2018/ru-olymp-roi-2018-day1.pdf https://neerc.ifmo.ru/school/archive/2017-2018/ru-olymp-roi-2018-day2.pdf |
|||
229
NSSerg
12.08.18
✎
10:11
|
ну и спойлер, решения
https://neerc.ifmo.ru/school/archive/2017-2018/ru-olymp-roi-2018-analysis.pdf |
|||
230
NSSerg
12.08.18
✎
10:37
|
Если кому интересно, прямо сейчас начинается финал VC Cup 2018 проводимого "вконтакте"
http://codeforces.com/blog/entry/61156 онлайн трансляция http://codeforces.com/spectator/contest/951/standings Важный день! Сегодня мы узнаем победителей VK Cup 2018. Призовой фонд чемпионата как и в прошлом году связаны с круглыми числами в двоичной системе счисления: •1 место — 1048576 рублей •2 местo — 524288 рублей •3 местo — 262144 рубля •4-8 места — 131072 рубля Планируем начинать в 10:40. |
|||
231
DES
12.08.18
✎
12:44
|
(225) не я, дочка. см. личку. (в ней инфа нее менялась с момента создания).
Дочка уже поступила в МФТИ, без экзаменов. И меня терзают смутные сомнения. Правильно ли она сделала выбор. |
|||
232
NSSerg
12.08.18
✎
13:27
|
(231) На прикладную математику и информатику?
А чего плохого в выборе? |
|||
233
NSSerg
12.08.18
✎
13:32
|
Вот у меня сын отличный выбор сделал. БВИ, выбирал из ИТМО СПБГУ, СПбАУ. Выбрал третье, так как там состав студентов намного сильнее, они брали только победителей и призеров финала вош, с других олимпиад не брали.
Так в итоге факультет после этой сессии развалился! Они полным составом, три курса бакалавриата, включая преподавателей и спонсоров (Яндекс) перешли в ВШЭ. Утешает то, что не вуз делает студентов, а студенты, преподаватели и спонсоры делают вуз. Так что репутация ВШЭ в прикладной математике и информатики должна вырасти, и места на icpc acm улучшится. |
|||
234
DES
12.08.18
✎
13:42
|
я не представляю девчонку которая так парит мозги, ну или она очень слишком более лучше крутая.
|
|||
235
NSSerg
12.08.18
✎
13:54
|
(234) его год, прошлый год выпуска, одна из самых крутых в России - девушка.
|
|||
236
NSSerg
12.08.18
✎
13:59
|
Дроздова Алнксандра. Чемпион России (чистое первое место), серебрянный медалист чемпионата мира среди школьников.
|
|||
237
NSSerg
12.08.18
✎
14:01
|
Виноват, третье место в фиеале всеросса вош
http://roi2017.snarknews.info/index.cgi?data=roi/base/012487&head=index&menu=index&class=roi2017&year=2017&contest=roi |
|||
238
2mugik
14.08.18
✎
12:08
|
ВШЭ - высшая школа экономики?
|
|||
239
NSSerg
14.08.18
✎
13:17
|
(238) Да. ВШЭ далеко не на последнем месте по рейтингам по ПМиИТ, и нормально выступает на ACM ICPC, но чемпионом мира ни разу не была. Ну и такого факультета в Питере не было, они в этом году будут числиться в Москве, а учиться в Питере. И есть вероятность что из-за этого в этом году в чемпионате мира участвовать не удастся.
Но по большому счету главное все-таки программа обучения и преподаватели, а они остались прежними. Ну и есть разница получить диплом ИТМО или СПбГУ, которые многократные чемпионы мира по программированию, или ВШЭ. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |