закончился.
Как по-нормальному переформулировать А и как аккуратно решать С(я, наверное, умею двумя тернарниками с бинпоиском, но это треш)?
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Название |
---|
A: будем разбивать вещи на классы.
Изначально все вещи в одном классе. После первого угадывания, на которое тратится Cnk шагов, у нас уже есть два класса: вещи, которые попали в итоге в набор, и все остальные вещи. Каждое следующее угадывание также разбивает каждый из имеющихся классов на две части: в одной части оказываются вещи, которые попали в последний набор, а в другой — которые не попали. Заметим, что непустых классов в каждый момент времени, очевидно, не больше, чем вещей.
Теперь нам приходит следующий запрос. Для каждого названия вещи мы знаем, было ли оно в первом запросе, было ли во втором, ..., было ли в предыдущем. Эта информация однозначно задаёт класс вещи, а никакой другой информации у нас на этот момент нет.
Значит, мы теперь знаем, что в ответ на запрос нужно положить ci вещей класса i; мы рассматриваем те и только те i, для которых ci > 0. А всего у нас, скажем, fi вещей каждого класса i. Тогда, очевидно, количество способов выбрать набор равно Cf1c1·Cf2c2·.... Поскольку никакой информации, кроме "набор не подходит", мы в процессе их перебора не получим, это число и нужно прибавить к ответу.
В C у меня прошло такое решение:
на контесте не успел написать, сейчас сдал в дорешивание: просто разбиваем шарик сеткой и запускаем поиск пути.
А кто-нибудь придумал клевое точное решение?
У меня довольно простое "точное" решение:
Найти угол плоскости геодезической к Oxy довольно просто — посчитаем векторное произведение векторов к точкам, посчитаем угол между результатом и плоскостью Oxy (sin alpha = abs(z) / length) — он будет отличаться от искомого угла на pi / 2. Теперь если сумма lat1 + lat2 >= 0, то это может быть верхней точкой, если меньше — то нижней. Для того, чтобы проверить, лежит ли эта точка на кратчайшем пути посмотрим на проекцию того самого произведения на плоскость Oxy. Если это точка — мы движемся по экватору и все понятно. Если нет — продолжим этот вектор до прямой. Если проекции конечных точек лежат по разную сторону — то да, надо брать, если нет — то просто выводим концы
Если долгота отличается на 180, то путь проходит через полюс и ответ понятен. А иначе ответ, это широты на концах пути.
UPD: меня тут убедили, что решение неправильное:(
Интересно, что за 5-ый тест такой в E...
long long.
кто-нибудь кроме меня, решил D бинпоиском по ответу + поток? или там какой-то конструктив или несложная жадина?
Пытался, но получил ТЛ. Зааксептил поток, запускающийся на последовательно увеличивающемся графе.
странно, я использовал мэп строк сетов, несколько сетов, каждый раз граф заново перестраивал, и тем не менее — зашло
F. Помещения на судне.
Похакайте меня, пожааааалуйста...
UPD. WA5
Я примерно такую же вещь пытался пропихать. Но у меня был все время WA 5. Хотя там заходил тупейший DFS.
ааааа, я задумывался на то, что могут ли два плюса рядом стоять, но увы фантазия подвела... очевидное же...
UPD. OK
Можно было так: для каждого плюса вычислим, вершиной какого числа прямоугольников он является. Если плюс в углу — то одного, если на стороне — то двух, если внутри — то четырёх, если со всех сторон "-" и "|", и двух иначе. Теперь делим на четыре и получаем ответ.