Блог пользователя Seyaua

Автор Seyaua, 15 лет назад, перевод, По-русски
Привет всем из солнечного Петрозаводска!

Сегодня я и мой брат sdya подготовили для вас несколько интересных задач. Из-за плотного графика на петрозаводских сборах, особенно из-за рафтинга и просмотра аниме ночами напролет, у нас было немного времени на написание длинных условий задач. Так что наслаждайтесь короткими условиями и изобретайте легенды на ваше усмотрение :)

Удачи всем!

Контест завершен! Поздравляю победителей!

Division 1:
  1. dolphinigle
  2. ilyakor
  3. marek.cygan
Division 2:
  1. wuzhengkai
  2. jayi
  3. superpear
Опубликован разбор.

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
ого, какая заблаговременность.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
короткие условия это хорошо, а то последнее время, особенно на топкодере больше времени уходит на чтение задач чем на их же решение... короче спасибо)

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
thanks Seyaua &  sdya for preparing and creating problems.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Второй раз ваш контест не удается написать, обидно:(

P.S. Удачного всем и во всех смыслах контеста!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Sounds like a pretty awesome training camp.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Just a little mistake "invent some legends for them on you own." Must be "invent some legends for them on your own."
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Seyaua & sdya, you guys look exactly the same in the pictures ;-)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Thanks to problemset I hope enjoy the problems.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Почему у вас одинаковая ава?))
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
which anime you guys finished recently ?
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится
Странно, мой гугл календарь показывал, что контест вчера должен был быть.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Не знаю точно куда написать.

У меня пропала кнопка отмены регистрации. Зарегистрировался на сегодняшний раунд и только потом вспомнил что на это время назначены важные дела.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Короткие условия это хорошо, и рафтинг это тоже круто=)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Man I love these training camps you guys get to attend. I wish I could, but none happens in my part of the world. :( Hopefully some day I'll conduct one, when I am RED. ;)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Что за чушь?

Почему нет тестирования?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Is the judge dead?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
what happened with the judge?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
very slow testing
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
The requested URL /contest/111/customtest was not found on this server. Это меня печалит, поскольку RE#1
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
How can I lock my solution?
The "lock" icon disappeared.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
I like statements :)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
unrate this round, please...
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Огорчён тормознутостью системы...
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Как вторую делать?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Если пройдет:
    Для каждого x находить все делители. смотреть когда каждый делитель появлялся последний раз. Если попадает в диапазон , то +1 к ответу, потом обновить для делителя время когда на него что-то делилось в последовательности.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
nice problems :)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Шикарный раунд. Если бы ещё нормально работала очередь (на неё, в принципе, пофиг) и вкладка "запуск" (а вот её отсутствие печалит).

Из первых четырёх задач дольше всего думал над B, которую и написал последней. Есть решение проще, чем для каждого делителя построить список чисел, его содержащих, и потом разбираться с каждым делителем в отдельности?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Можно хранить когда последний раз встретился каждый делитель. И делать все онлайн
  • 15 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Для каждого числа тупо построить список его делителей иподдерживать массив когда мы последний раз его видели
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Блин, очевидное же решение. У меня в общем, то же самое, только в оффлайне.
      И почему я это придумывал минут двадцать реального времени?)
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        а почему я час писал какое-то г**но по ней вместо того, чтобы думать над нормальным решением?

        P.S. столь же риторично, да
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Я так понимаю, что B(Div 1) == D (Div 2).

    Я для каждого делителя хранил индекс последнего числа, которое кратно ему (числа из массива X). Ну и в итоге асимптотика O(N * sqrt(N)).
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Расскажите идею решения 3-й задачи во втором дивизионе, пожалуйста.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кто какие хитрые тесты знает к C (div1)? Я написал жадность, поэтому хотелось бы ее потестить...
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
good short mathematical questions.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
На чем ломали A(Div 1) / C(Div 2)?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
I wanted to use custom test feature, but it was disabled. :(
Anyway, thanks for the good problems.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
In problem B i know the size 2n*2n but i didn't notice he give me the input 2n not n
i solved the problem as the input=n so i didn't divide by 2
so just n/2 ----> passed  :( :( :( :(

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
I love these short and challengeable problems.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Petya and divisors .... Nice problem  . But unfortunately i wasn't able to solve it. :(
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Нельзя писать такие решения, которое я написал по задаче B. Хранить все числа, делителем которых является данное число. Счастье, что оно зашло.
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

А вот мне раунд не особо понравился. Скучная 4-я задача
+ в третьей совершенно незаметное условие m*n <= 40, в результате чего я начал искать конструктив
+ в пятой не особо заметное условие что ячейки не в одном столбце и не в одной строке.

НО: хотелось бы отметить, что задачи B и E мне понравились. С нетерпением жду разбора Е, очень удивлюсь, если окажется, что для нее есть верный полиномиальный алгоритм.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Can anybody tell me how testing is done when there are multiple solution for test case, like in todays div2 Problem C.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
I made a funny mistake, failed my C because I thought that 1<<6 is less than 40 :-)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Что-то я совсем разучился думать. Написал в B sqrt-декомпозицию...
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Если не секрет, как?
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Разбил все n чисел на sqrt(n) групп. В каждой группе хранил булевский массив чисел, которые являются делителем хотя бы одного числа из данной группы. А дальше для каждого делителя каждого числа находил за sqrt(n) будет ли он входить в ответ или нет.
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Так все-таки, будет раунд рейтинговым или нет?
UPD вопрос снят
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Подскажите как решать задачу E(Div2)/C(Div1).
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Лично я перебирал по точкам, в которых останутся пауки, и для каждой позиции проверял, есть ли рядом с ней выбранная точка. Это 2^(N*M) * (N*M). Но я перебирал маски в порядке увеличения количества битов (т.е. первая годящаяся и есть ответ), и ещё несколько оптимизаций.
    Думать дальше мне было лень, но это уже походило на что-то выполнимое по времени, поэтому я запустил это на своём компе, и минут через 10-15 получил ответы для всех возможных тестов, ведь их не так и много.
  • 15 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    У меня Дп по 2м маскам:
    очевидно что нас в текущий момент интересует только последний и предпоследний столбец.
    Я хранил две маски: то, с каких клеток не будут двигаться и те которые еще не ушли с клеток, хотя клетка должна быть свободна. И переходы (i,m1,m2) - (i+1,m3,m4) m4 определяется по m1,m2,m3. Не особо оптимизил по времени, вышло: O(n*2^(3*n)) если чуть-чуть переписать, то будет: O(n*3^n*2^n).
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      У меня O(n*2^(2*min(n, m))), просто держу две последние маски и слежу, что-бы второй столбец который рассматривается после перехода был заполнен (то-есть что-бы все расстояния были не больше 1).
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Мда, собственно непонятно, почему N*M <= 40. Сразу веет каким-то перебором, поэтому тупанул с решением. Лучше бы дали N <= 8, M <= 1000 (что-то в таком духе).
        Ну и небольшой комментарий к решениям: N <= 6, так как мы можем спокойно повернуть поле, если это не выполняется.
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Можете поподробней объяснить свою идею ?
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Как я понял ты делал изломаный профиль, что-бы добиться такой оценки?
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          Забыл вчера учесть переход - да, у меня O(n*2^(3*min(n,m))).
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Так реалистичнее))
            Самое лучшее что можно написать это наверное: O(N*M*2^(2*N)) N<=M.
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится
              Поделитесь идеей, пожалуйста :)
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится 0 Проголосовать: не нравится
                Тут вроде-бы все стандартно, добавляем по одной клетке, очевидно что интересующих старых будет N, потому-что то что было раньше уже не исправишь. Ну и как в моем решении храним две маски то что будем/не будем трогать и положение клеток, то-есть выполнилось или нет, соответственно с маской. Когда убираем последний бит, он обязательно должен быть в нужном состоянии. Кстати можно написать это за O(N*M*3^N), так-как вторая маска подмаска первой.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Расскажите , а почему взламывали вариантом n>y задачу 3 в втором? Это авторы не учли в претестах или они типа оставили пространство для взломов?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Понятно, что оставили пространство для взломов.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
      Ну так претесты на то и существуют, чтобы пропускать решения, походие на правильные. Но на сей раз количество взломов по С div.2 / A div.1 больше чем по всем остальным вместе взятым.  
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
In division 2, C; test 50 looks like that: 2 1 1 and the supposed answer is 0 1. However, in problem it is said that all the numbers should be positive integers, it means 1 or greater. So with n=2, it is impossible to satisfy y=1. My answer was -1 then, but i got WA.
Did I miss something or it is a mistake in author's solution?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Я внезапно фиолетовый (:
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Excellent contest like it (though my rating went down)
Can anyone help me with the problem Div1C.....
How the answer for input 4 4 is 12............... 
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
This is the first time in my life I've become Blue.

Nice Problem-set.
but I don't know why the judge queue took so much time.

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
I think brief description is cool. With possibly as much mathematical expressions as possible to reduce ambiguity.
Thanks  Seyaua and sdya for problems :)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Если кому ещё может интересно, в задаче С у меня было дп по троичной маске, где варианты клеток: паук останется, паук сползет вниз, паука уже нет.
Для перехода перебирал двоичную маску где останутся пауки. Сложность O(N*(3^M)*(2^M))(N>=M).
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Nice short-statements problem set!
Any one else didn't see the n.m<=40 constraint in C DIV-1?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Finally Petr owns both TC and CF.
15 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

Is there any way to see on which test case my solution was hacked i.e. the hacker's input during the contest?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Can someone please explain the solution of problem E from Div 2? :D
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    It is basically brute-force but reducing complexity to solvable limits by using memoization/bottom-up DP.
    1.first rotate the grid such that smaller side remains at top, which is of length <= 6. (sqrt(40)).
    2.then try all possible subsets (2^6).
    3.any particular state is given by settled spiders in curr. row and prev row. and the curr row number.
    4.Easy if you have solved similar problems previously.
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

tunyash, я для этой задачи M раз делил(умножал) на 3.
Быстрее можно, если, например, предпросчитать результаты функций, аналогичных операциям битовым AND, XOR и тд. для небольших чисел. И для работы с большими числами разбивать на меньшие делением на степени тройки.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
it isn't fair!
the timer should be started as a problem is opened or at least when someone enters the contest area!
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    But your first submission was only after 34 minutes, when judge has already begun to work properly
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    I think this is a fair complaint.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    As I understood this complain is not related to today's incident, but for CodeForces format as well. But it's the rules - the timer starts at the set time.
    But seriously, I don't get what isn't fair - that's the rules of this competition. It's like arriving late to a rock star concert and complaining afterwards that he started before you arrive. The advantages and disadvantages of particular format (CodeForces/ACM/TopCoder/IOI etc.) is another topic.
    Sorry if I misunderstood your post.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
yes, but I entered the room 26 minutes after the beginning and it should be 8 nor 34!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Мне очень понравилось решение Андрея Лопатина по задаче С. Он занял 44 место на раунде, посмотрите:)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Объясните в чем я не прав в задаче Д:
для m=1: ans = k^n
для m=2: нужно посчитать кол-во способов покрасить первый столбец в Т цветов и второй в Т цветов(причем использовать все Т цветов нужно), и для каждого Т их перемножить.
для m>2: у нас первый и последний столбец должны содержать одни и те-же цвета, а посередине цвета которые использовались по краям, но не обязательно все.
Получил ВА на претесте 4, видел что не у одного меня такой ответ на него выдавало. ЧТо не правильно?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Когда будет разбор!!!
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Может, люди, которые решили по 4 задачи в 1 дивизионе, проведут какой-то разбор?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А почему у http://mirror.codeforces.com/profile/tourist по задаче D TLE 11 тест? А именно, если посылать соответствующий код под Delphi 7, он TL'ится, а под FPC -- AC с 750 мс. Есть объяснение данному феномену?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Кажется, Delphi как-то очень тупо эмулирует int64 работой с двумя integer. Я сталкивался с тем, что число вычисления в int64 на Delphi работают в раз 5-10 медленнее аналогичного кода на C++ для типа long long. Может в FPC с этим получше, отсюда и разница?
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Да, действительно оказалось, что взятие 64-битных чисел по модулю в Delphi работает на порядок медленнее, чем в FPC.

      Честно говоря, отсутствие возможности запустить код на сервере довольно сильно помешало (использовать то, что за WA1 баллы не снимаются, на контесте я не догадался :)). У меня локально работало примерно 7 секунд, а во всех задачах разница по сравнению с серверами CF была как минимум вдвое. Но не в этой...
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Hi! This was a great round, except for some technical issues that we all noticed, but oh well, they didn't really affect anyone's score in my opinion :D When is the editorial going to be available?
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Editorial eagerly awaited !!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Простите за глупый вопрос, но в див.2 в задаче А, как можно было коротко поменять все буквы скажем на нижнего регистра? Просто я не понял как такое организовать и написал цикл с кучей ифов и  вещей а-ля 'A'='a'

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
The next context is coming soon.But the editorial still isn't available!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
What an elongated "soon" you mentioned. The tutorial isn't available yet! :O
»
8 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

?detaR tI sI