Напоминаю, что в 16:00 начнется шестая личная интернет-олимпиада http://neerc.ifmo.ru/school/io. Не забудьте зарегистрироваться!
По окончании олимпиады здесь можно будет обсуждать задачки.
№ | Пользователь | Рейтинг |
---|---|---|
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 | 156 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Напоминаю, что в 16:00 начнется шестая личная интернет-олимпиада http://neerc.ifmo.ru/school/io. Не забудьте зарегистрироваться!
По окончании олимпиады здесь можно будет обсуждать задачки.
Название |
---|
Будут ли токены? Всем удачи.
Нет, токенов пока не будет. Веб-клиент не поддерживает эту возможность.
А почему? На втором отборочном ИОИП они вроде же были
не было
А можно ли где-то видеть текущие результаты? По ссылкам today мониторы месячной давности.
Текущих результатов нет, поскольку баллы объявляются по окончании тура.
Кто-нибудь может пояснить 1ый сэмпл задачи В?
Письмо жюри отправил, но они так и не ответили (прошло около получаса).
Аналогичный вопрос. Тоже отправил вопрос жюри. По идеи ответ 12 9 6 должен быть. Если следовать условию.
я тоже не понимаю его, и тоже отправил письмо, и тоже не получил ответа.
по идеи там должно быть 12 9 6?
Вроде да.
Либо условие написано слишком плохо, либо неправильный сэмпл.
Я так понимаю, составляя семпл решили, что быстрее = больше времени
Это ж совсем глупо.
В том и дело. Я как-то сразу не обратил внимания, больше на семпл смотрел, а не на условие. Интересно, как они это исправят, полтора часа контеста прошло.
/* Тут должна быть традиционная для CF в таких случаях шутка про unrated раунд */
Ну что там слышно? Жюри ответа не дали?
Нет, не дали.
17:44 В задаче B (Спутник), ответ в первом примере "12 9 6". Решения будут перетестированы.
Задача B (Спутник): Ошибка в тесте из условия была. Условия и тест в системе исправлены. Решения перетестированы. Результаты проверки присланы заново. Не забудьте, что будут проверятся только принятые на проверку решения.
Приносим извинения за задержку в исправлении ошибки и ответах на письма.
Как решать С?
я решал так: найдем последнее число, которое полностью лежит в этом отрезке и для него посчитаем динамику dp[длина числа][сколько пар нулей][чем кончается][превысил префикс числа префикс найденного нами числа]
ну еще надо учесть, что после последнего числа остается какой то небольшой хвост и его надо отдельно проверить
для 107 работает
Я нашёл число, на котором последовательность обрывается, затем динамика:
d[len][k][last][gr] — сколько двоичных чисел (без 2-х единиц подряд) длины len,имеющих k парных нулей, последний символ last и меньше, больше или равно префикса граничного числа длины len.
UPD: у меня решение палёное или все просто так минусуют? :)
забей
Схематично расскажу. Заметим, что имеет смысл посчитать количество таких пар только в каждом числе отдельно.
Теперь собственно решение: 1) Находим номер последнего числа, которое целиком влезло в строку 2) Для каждой длины(в фибоначчиевой системе счисления) насчитаем динамику — сколько таких пар существует среди чисел с такой длиной(и меньших последнего). Это вроде стандартная динамика.
Для кого стандартная, а для кого — не очень :)
Какая-то не очень динамика — на 8 баллов всего.
Увы :(
у меня дп немного другое
flag — это boolean, если текущее число меньше или равно последнего числа, которое полностью входит в нашу часть в динамике два значения — количество нулей и количество таких чисел
по сути своей, все вышеприведенные решения — одно и тоже
Покажи пожалуйста код
Вот мой код
И D тоже неплохо рассказать было бы :)
мне одному не понравилось, что задача С была почти такая же, как и на предыдущей тренировке?
Мне тоже не понравилось.
На предыдущей она попроще была, разве что.
они разные, но мне кажется неправильным на 3/5 индивидуальных контестах на задачу С ставить ДП по разрядам. есть же еще другие темы.
Какое ДП по разрядам? Десять минут посливать суммы чисел Фиббоначчи в единую формулу плюс пять минут на написание тащит! :-)
А пару контестов назад была еще одна задача из цикла "написать дп по цифрам"...
A когда будут доступны результаты ?
надеюсь не так как в прошлый раз
Обычно, это 2-3 часа.
Правда, один раз они были доступны через 5 минут после окончания тура.
Это зависит от разных причин. На некоторых олимпиадах отключается тестирование на всех тестах во время тура, на некоторых сервера вполне справляются. Сегодня была отключена только задача D — вот она сейчас и дотестируется.
К сожалению, иногда нету физической возможности сразу выложить результаты на сайт...
можно следить за тестрирование в клиенте
в D проходит сначала жадно передвигать меч по прямой, а потом пересекать окружности? P.S. у меня в задаче С в одной функции был int, вместо long long, а я все понять не мог, из-за чего у меня TLится на 10^10, обнаружил это через 5 минут после окончания контеста, с исправленным багом работает на макс тестах...
казалось бы, лучше сначала найти нужную точку на окружности вокруг конечной точки, а затем жадно двигаться уже к ней
а как ее найти?
Ну, я делал так: мы хотим сначала сколько-то раз передвигать нашу точку по прямой — в сумме на расстояние n * segmentLength, а затем один раз передвинуть на segmentLength уже в конечную точку. Также мы знаем расстояние d между начальной и конечной точками. Отсюда n ≈ [d / segmentLength] Теперь можно по теореме косинусов найти угол между вектором (начальная-конечная) и вектором (начальная-промежуточная). Зная угол и длину вектора, находим промежуточную.
насколько я понял, вы сначала вычисляете это точку, а потом двигаете к ней, но тогда не пойму, чем это лучше того чтобы двигать точку и походу смотреть, можем мы достигнуть из нашей текущей токчи конечную точку?
Пусть Вы, преодолев расстояние n * segmentLength, обнаруживаете, что расстояние до конечной меньше segmentLength (я ведь правильно понял, какую проверку Вы имеете в виду?). Тогда теперь Вам нужно сделать как минимум два перемещения: на окружность и с окружности в центр. Но первого из этих перемещений можно избежать, если с самого начала двигаться в удобную нам точку на окружности. Такая точка, достижимая из начальной за n шагов существует всегда, т.к. за n шагов можно оказаться даже внутри окружности.
ах да! спасибо
На чем можно было слить А?
на лонгах, на даблах, не?
Возможно. Обидно, блин.
а можете описать, как надо было делать? Просто у меня 0, это толкает меня на мысль, что я не правильно понял условие
Находим . Теперь нам нужно найти подарок с минимально возможной стоимостью большей либо равной х. b вообще было не нужно.
А нет, я нашел багу. Оказывается в одном месте опечатался, стоило сотни, печально
вы бы код показали
нам задана стоимость основного товара, к нему надо выбрать подарочный товар, но при этом стоимость выбранного товара не должна быть меньше a процентов основного и не больше b процентов, при этом, если таких товаров несколько, надо выбрать товар с минимальной стоимостью
то есть пусть цена основного товара x, а товара, который мы ищем y, тогда должно выполняться иначе говоря ax ≤ 100y ≤ bx ну тут надо не забыть про то что цены до 109 и поставить
long long
вот код
P.S. объясняю и чувствую себя идиотом — разжевывыю какую-то элементарность
спасибо за объяснения, все таки дело было не в понимании
Результаты выложены на сайте.
Как? Нет, как я умудрился набрать сорок по первой? И ведь я даже не знаю, в чём баг — нет доступа к решению.
я вместо "continue" — "break" поставил, норм чё)
Скорее всего лонг лонг забыл, если 40 набрал.
Кстати, я тебя понимаю. На одном недавнем нирке тоже слетел на халяве при всех остальных решенных :)
Не-а, не забыл. Блин, вот бы код ещё раз посмотреть. А вот нет доступа. Веселуха, в общем)
Скорее всего именно на каких-нибудь переполнениях, иначе почему именно ровно 40(которые в условии указаны)?
ХЗ, так, наверное, и есть. Ладно, хрен с ним) Не такая высокая птица, чтобы париться о ней)
Такой вопрос еще, почему у меня в С 40? вот код, на локальной машине все проходит. Код я не менял, только дебаг комменты убрал, чтобы легче читалось.
Может ли это быть из-за того, что я не правильно вывожу лонги?
Да) Поменял на
cin
иcout
, прошло все тесты.значит фигня с
не пашет? Вообще какая переменная точно определяет виндовс машину от других? Я видел несколько вариантов, но не пойму, какие правильные, а какие из головы:
WIN, WIN32, _WIN_, __WIN__, __WIN32__, DOS
...В MinGW работают эти:
WIN32, __WIN32__, _WIN32_
И вообще, лучше писать так, чтобы сразу получить CE:У меня в шаблоне сделано так:
Знай и люби особенности своего языка программирования и его компиляторов.
я бы не стал призывать любить неудачные решения в дизайне
Ну не портить же цитату :)
Вообще, честно говоря, проблемсет не понравился. Не было ничего, где нужно хоть сколько-нибудь подумать — сиди себе и пиши боянистые задачи. Не говорю про первые две незадачи, C — 42 раза сверни формулу с числами Фиббоначчи/напиши динамику за логарифм в произвольной степени/сделай чё угодно, D — классический боянчик про кратчайшую ломаную. Беее.
Все хорошие задачи копятся на серьезные олимпиады :) А вообще, Макс, со временем около 90% школьных задач становятся боянистыми...
Вот неожиданность-то :-) Я имел в виду, в сравнении с остальными школьно-нерковыми турами этот получился слишком боянистый. От остальных как-то такого гнетущего ощущения не оставалось.
Что-то никто кроме тебя, этот "D — классический боянчик" не смог написать на 100. Может расскажешь как?
Ну, переформулируем задачу так: нам нужно найти кратчайшую ломаную из отрезков длины l, которая содержит отрезки u и v в качестве звеньев. Кратчайшую в смысле количества звеньев.
Заметим, что отрезки u и v должны быть крайними. Значит можно перебрать от какого из концов отрезка u до какого из концов отрезка v будет идти наша ломаная. Теперь осталось научиться строить кратчайшую ломаную между двумя точкам A и B.
Разберём руками два вырожденных случая — когда A и B совпадают, ломаная будет нулевой и получается два варианта — если отрезки u и v совпадали (мне кажется, все, у кого 98, посеяли именно этот случай), то итоговая ломаная будет из одного звена, если же они только имели общий конец, то получается ломаная из двух звеньев. В противном случае — |AB| ≠ 0. Утверждение. Кратчайшая ломаная будет содержать звена. Как это понять? Если , то очевидно, что кратчайшая ломаная как раз разбивает AB на k таких отрезков. Если же |AB| не кратно l, то мы либо откусываем отрезок длины l От отрезка AB, либо, если |AB| < 2l, строим два отрезка длины l, образующих равнобедренный треугольник с AB в основании. Легко доказать, что такая ломаная будет кратчайшей.
Победа.
Может кто-нибудь показать пример кода (на с++) как вводить с getline в цикле ?
Так у меня выглядела первая задача. Вводим s 2 раза, т.к. в первый раз она считает только символ перевода строки.
Не плодите говнокод, чтобы этого символа не было надо очищать поток перед чтением:
fflush(stdin);
или же считывать после чисел пробелы и переводы строки через scanf("%d%*c", &n);
В некоторых случаях
Ваш кодкод видаscanf("%d ")
становится говнокодом. Например, представьте себе, что произойдёт, если строка для считывания содержит пробелы. Например:Правильно — пробелы в начале строки не считаются, что довольно трудно поймать, если об этом отдельно не подумать.
А про очистку потока я вообще не понял. scanf("%d") читает ровно одно число и еще один символ после (который, вроде как, загоняет обратно при помощи ungetc или как-то так). Поэтому перевод строки несчитанным останется, чтобы мы там с буфером не делали.
1)Согласен, о пробелах я не подумал.
2) Я когда-то очень долго не понимал, что происходит после чтения строки, но после экспериментов я пришел к этим двум способам. Очистка потока уберет все лишние символы(да, не всегда хорошо), scanf("%d%*c") считает число и ТОЧНО считает еще один символ после, т.е. перевод строки, а scanf("%d") скорее всего прямолинеен и считывать только число и ничего больше.
На самом деле, я тут чуть накосячил, прошу прощения. Моё замечание относилось к scanf("%d ") — вот тут действительно считаются все пробелы после символа. Но я сейчас потестировал — Вы, видимо, имели ввиду
%d%*c
. Под MinGW так работает, если убрать второй%
— не работает. fflush(stdin) после scanf не помогает, и даже наоборот, с ним перестаёт работать вообще как-либо.Однако придраться можно — если говорить про "прямо писать", то стоит вспомнить, что под виндой перевод строки обозначается \n\r и при чтении файла в режиме "rb" (что на олимпиадах, к счастью, никто не делает) надо будет читать два символа, а не один.
Да, я имел ввиду %*c. А придраться можно к любому коду. Так что пускай человек сам выбирает, что ему больше по душе. Мне лучше сишные методы с использованием scanf и fgets.
"%d*c" "%d%*c"?
Ещё можно "%d ", чтобы пропустить после числа все пробельные символы (если они не нужны).
В этой задаче ещё можно читать, например, так: fgets строки с числом в буфер, sscanf числа из буфера, fgets следующей строки с текстом.
скачал тесты — 32 тест (output) задачи Д пустой, так и надо?
Нет, это некоторая бага. Вы ее нашли почти что одновременно со мной. Сейчас решения перетестируются. Максимум баллы изменятся на 2.
некоторым даже баги сервера не мешают на 100 сдавать =)
Гы :-)