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

Автор I_love_natalia, 14 лет назад, По-русски

За пределами Самары мало кто знает, что в Самаре 18 марта прошло межвузовское первенство по спортивному программированию. Это одно из двух первенств, проводимых ежегодно в Самаре.

В общем, все желающие потренироваться, кто не был на этой олимпиаде, могут принять участие в соответствующей тренировке на Codeforces. Тренировка будет по правилам ACM, задачи будут на русском языке и, почти наверное, на английском языке.

Задания были подготовлены Алексеем Дергуновым (dalex), Никитой Глащенко (Hohol), Павлом Семушиным (craus) и Андреем Гайделем (Shlakoblock). Тестировали комплект я (I_love_natalia) и Наталья Бондаренко (natalia).

Тренировка будет наиболее интересной для участников фиолетового и начального оранжевого уровня (сложность ***). Красный участник, видимо, закончит контест сильно заранее (каждому из тестеров понадобилось порядка трех часов). В комплекте есть задачи различного уровня простоты.

Пройдет тренировка 24 марта в 16:00 по московскому времени, участвовать приглашаем всех желающих.

Просим при участии не использовать prewritten код и вообще материалы в интернете в знак уважения к призракам участников олимпиады, которые будут участвовать с вами ;)

Upd. Время поменяли на 16:00.

Upd2. Для ввода-вывода используйте файлы input.txt и output.txt!

Upd3. Не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -12 Проголосовать: не нравится

fail, Таганрог в это время:(. Ну ладно, виртуально напишем.

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

24-го личный турнир ТТИ ЮФУ в Таганроге...

жуть какая.. всё со всем пересекается... :(

»
14 лет назад, скрыть # |
Rev. 4  
Проголосовать: нравится +1 Проголосовать: не нравится

Может перенести на пятницу?

Ибо в воскресение полная жесть: опенкап, нирка, кодфорсес(2 раунд) друг за другом.

хм, а в пятницу обычный кф. Ну если ставить в пятницу, то тогда днем. Но,имхо, лучше растягивать удовольствие и решать на кф 2 дня вподряд=)

тогда может быть лучше на четверг?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

есть еще вариант в субботу но позже, после Таганрога? часов в 5. Как раз нормально будет

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +23 Проголосовать: не нравится

А вот и телевизионщики, как всегда, в своем репертуаре: http://www.guberniatv.ru/material/9945.html

Особое внимание на момент 1:26! (да-да, соревноваться вы в нашей тренировке будете в том числе и с профессионалами своего дела)

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +6 Проголосовать: не нравится

    Что ж, про всякие там биатлоны тоже сначала бред писали. Авось и наш вид спорта начнут нормально комментировать. Лет эдак через 128.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +9 Проголосовать: не нравится

    Мне больше всего понравилось название.

    Похоже, им забыли рассказать, что правильная командная олимпиада — это тонна развлекухи для участников, не зря же втроем играют!)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Not a rated contest?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +41 Проголосовать: не нравится

Handlers of 2 testers look alike :)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

Пользуясь случаем, хочу от лица команды сказать большое спасибо за хороший набор задач. Если бы не заминка с компьютером нашей команды, то вышло бы совсем замечательно)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +33 Проголосовать: не нравится

interesting to see natalia and i_love_natalia to be tester team :D

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится

Registration is opened.

Please note that you must read from file input.txt, not from stdin, and write to file output.txt, not to stdout.

If you use GNU C/C++ compiler, don't use %lld to read or write 64-bit integers. Use %I64d or cin/cout.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +12 Проголосовать: не нравится

Регистрация не закрывается с началом тренировки. Вы можете принять участие, даже опоздав к началу.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Будет ли разбор задач?

P.S. Расскажите, пожалуйста, решение A, I, J.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    J-бин.поиск по ответу, проверка дейкстрой

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Да, была такая идея, но слишком поздно.

      Там же можно и тупую дейкстру за квадрат писать?

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        вроде да, ну вершин 1000, видимо можно

        • »
          »
          »
          »
          »
          14 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          Можно-можно. Зашло без проблем :) А не расскажете, как K решать?

          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +5 Проголосовать: не нравится

            Ну, например, так:

            String s = readString();
            int ans = 0;
            while (s.contains("13")) {
              s = s.replaceFirst("13", "");
              ans++;
            }
            out.println(ans);
            

            Это доказывается и является правильным решением.

            А вот самое простое решение, что можно было придумать. Ясно, что в конце строка будет выглядеть как 33..3311..11 (сначала все тройки, потом все единицы). Переберем все позиции исходной строки, на которых стоит тройка. Тогда для получения ответа надо удалить все единицы левее и все тройки правее. Выбираем минимум из всех таких вариантов.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    А — факторизуем k на множители до 105. Если не получилось (есть множители больше) — нет решения. При этом множители будем учитывать в тех степенях, в которых они содержатся в числе k. Наша задача — сделать перестановку с циклами длинной, равной степеням множителей. Т.е. для числа 12 надо сделать перестановку с циклами 4 и 3. Если сумма всех множителей больше 105 — снова нет ответа.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Так и делал, WA72, видно накосячил в реализации.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Я не понял про длину, равную степеням множителей. Можешь объяснить поподробнее?

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится 0 Проголосовать: не нравится

        UPD: int operator+ (int a, int b){return a*b;}

        12 = 22 + 3 — следовательно нужна перестановка с двумя циклами: длинны 22 = 4 и 3 соответственно. Я просто написал криво %)

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        Спрашивали не у меня, но отвечу, вдруг пока буду писать ответ, найду ошибку в рассуждениях из-за которой у меня задача падает аж на 72м тесте.

        12 = 2^2*3^1 Соответственно, наша шаффл машина будет работать для 2^2+3^1=7 карт и реализовывать два непересекающихся цикла с длинами 4 и 3, то есть ответ будет, например, "2 3 4 1 6 7 5". Первые 4 карты возвращаются на свои места каждые 4 перемешивания, вторые три карты — каждые три перемешивания, вся система возвращается в исходное положение за НОК(4, 3)=12 шагов, что и требовалось построить.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      а вы смогли строго доказать, что минимальная сумма будет достигаться когда циклы будут длины степени простого? (а то у меня как-то не очень получилось)

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        бессмысленно брать меньшие степени, т.к. тогда нужный НОК не получится, а то, что эти множители друг на друга перемножать не надо, вроде очевидно.

        • »
          »
          »
          »
          »
          14 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          вы не поняли меня, я о том, что почему не выгодно набор множителей: 2 2 2 3 3 разбить не как 2*2*2 и 3*3, а 2*2*3 и 2*3?

          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

            Цикл перестановки с циклами 2*2*3 и 2*3 равен 12, а с циклами 2*2*2 и 3*3 — 72

            • »
              »
              »
              »
              »
              »
              »
              14 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится

              я понимаю, ну я имел ввиду, конечно же домножив числа на нужные простые, чтобы НОК стал равным 72

          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

            потому что во втором случае начальная ситуация повторится раньше, а именно через 2*2*3 шагов (НОК всех длин циклов)

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +3 Проголосовать: не нравится

        Пусть какой-то цикл имеет непростую длинну a*b. Если мы сделаем два цикла длинны a и b (a и b — взаимно простые), то a+b<a*b (т.к.2<=a<b) и данная перестановка будет переходить в себя с периодом НОК(a,b) = a*b итераций. Поэтому выгодно разбить на простые.

  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится +3 Проголосовать: не нравится

    I — динамика на дереве. Храним для каждого поддерева 3 ответа:

    1) если в корне стоит полк

    2) полк не стоит в корне, но корень покрыт каким-то другим полком из сыновей

    3) корень не покрыт никаким полком, но все остальное поддерево корректное

    Кажется еще можно было как-то жадно решать.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Это задача I.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
      Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится

      к слову, более общий случай был на одной neerc, задача Д

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Я тоже так решил ее, динамикой.

      Есть и другое решение. Понятно, что в листья ставить никогда не бывает выгодно. Поэтому поставим в предков листьев, и удалим их из графа.

      Однако это не удается четко написать. Иногда там что-то не то удаляется и возникает какая-то фигня. Оказывается, корректно на каждом шаге удалять предка самого глубокого листа.

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        Можно написать вполне аккуратно. Посортим вершины по их глубине и начнем обрабатывать в порядке ее уменьшения. Заметим, что вершина на которую мы сейчас смотрим, если она не покрашена, будет яляться листом. И тогда покрасим ее предка(если он есть)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In problem K, Does the problem ask "Deleting the minimal number of digits such that the string "13" won't appear as a substring?" If so, I suggest a better problem description next time, especially for non-Russian readers like me. I really hate figuring out what to do in such kind of problems.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    > Does the problem ask “Deleting the minimal number of digits such that the string ”13“ won’t appear as a substring?”

    Yes, it does. It was clearly written in the output format. Many people, and non-Russians too, understood the statement and solved it — I don't know why you couldn't do the same.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
      Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится

      Could you point out which sentence including this? I was confused at the beginning, then decided to search the problem's title on Google and got its meaning.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +5 Проголосовать: не нравится

      Sorry, that was entirely my fault. However, I'm not sure if Kostya had nightmare in his dream or not, but I'm sure I had nightmare for wasting 3.5 hours just reading this problem and didn't know what to do until I looked up at the page number (only now did I know that the page number was abnormal :( )

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +5 Проголосовать: не нравится

        And my Foxit PDF reader doesn't show the page number until I drag to the end of the page, which I have never done before :(. I always use my keyboard to scroll up/down or turn the page, which doesn't show the page number. Maybe next time I should prepare against Russian joke.

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +2 Проголосовать: не нравится

Вот что значит, первый раз пишу тренировку... Пришел счерез полчаса после начала — посмотрел, что все сдают В. Скачал условие, написал, минут 10 пытался сдать — оказывается, номер задачи в поле для отправки надо отмечать вручную, а не автоматически как обычно. Отправил — получил WA 1. перечитал условие — обнаружил, что это задача А О_о. Отправил, получил WA 4, исправил, сдал. Скачал задачу В — там снова задача А О_о долго тупил, пока не понял, что тут все задачи в одном файле. Дальше пошло лучше, только D проверялась минуты две. Дошел до F, понял, что умею решать её хешами, огорчился, бросил =(

А вообще задачи клёвые, спасибо, Teddy Bears & Ko за контест!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

в задаче F были тесты, которые валили хэши?

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Судя по тому, что по E есть решения со временем работы ~980мс и ~150мс, там должен быть какой-нибудь хитрый способ избежать перебора, не подскажете какой?

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    у меня перебор 160мс, видимо перебор можно сократить, если для каждой задачи хранить маску — тесты, которая она не проходит, и тогда решение получится за m*2^n, а не m*n*2^n

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Это n*2^n. А m*n*2^n проходили, да, если нормально написать. Плюс там вообще какая-то хрень проходила, тесты слабоваты.

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
        Rev. 3  
        Проголосовать: нравится 0 Проголосовать: не нравится

        да вроде все таки m*2^n — m тестов, n задач, перебираем маску и смотрим для каждой из m задач, что все хорошо

        P.S. жирный текст, что-то не отображается

        • »
          »
          »
          »
          »
          14 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          Для каждой задачи храним маску тестов. Перебираем биты в маске задач (их n), для тех, что на месте, or-им маску тестов. Так что n*2^n

    • »
      »
      »
      14 лет назад, скрыть # ^ |
      Rev. 3  
      Проголосовать: нравится 0 Проголосовать: не нравится

      Я пробовал каждый тест представить в виде числа, в двоичной записи которого 1 стоят на местах с номерами задач, которые он валит (возможно это и имелось в виду под хранением маски, не силен в терминах). Тогда для каждого из 2^n наборов тестов можно просто посчитать побитовое "или" для тех тестов, которые мы берем (если оно равно 2^m-1, то такой набор тестов нас устраивает). Получается n*2^n. Но на python, судя по всему, у меня не было шансов с любым перебором.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Is there an editorial of the problems that we can read somewhere for the ones we didn't solve?

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    We didn't write the editorial, especially in English; maybe you better ask your questions here? I think many people can answer.

    And if someone writes the editorial, we will very grateful to him :)

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Thanks, I just didn't want to bother everyone with too many questions. What was the intended solution for A? I know you would need cycles that would have an LCM of k, but I couldn't figure out how to factor k since it could be so large.

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится +6 Проголосовать: не нравится

        Usually, when you factor a number, you check all divisors up to square root of this number. In this problem you need only check divisors not greater than 105 — because if factorization of K contains prime number greater than 105, sum of numbers in factorization is surely too large.

        • »
          »
          »
          »
          »
          14 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          Ahh of course, thank you! It seems so obvious now.. Any hints on L?

          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +5 Проголосовать: не нравится

            It is obvious that the best amount to donate is some b[i]. Lets sort a and b and precalc sums a[i]+...+a[n-1]. Then for every b[i] we find with binsearch number Ab — how many a[j] are bigger than b[i]. Let Bl be the number of b[j] less than b[i]. So the number of money we get is precalc[n — Ab]+b[i]*(n-Ab-Bl).

          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +1 Проголосовать: не нравится

            Obviously, optimal value of p is equal to one of bi. So let's find answer for all of them and get maximum.

            Solution is sweep line. Sort all events (ends of segments) in increasing order and process them in this order. In any position X you should know two values: cnt — number of currently opened segments, and curSum — sum of ai which are greater then X. Initialization: cnt = 0, curSum = sum of all ai. In any event update this values: if this is start point: cnt++, curSum -= X. If end point: cnt-- and find answer for X — it equals to cnt*X + curSum.

          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

            You can also implement the solution with 2 fenwick trees.

            One of them you will know how many intervals are open at each point, and on the other how much money you get from intervals that start above that point. pretty simple to update and read.. and for the answer you just go through every data read and get the best !

            ops: don't forget to compress coordenates because 10^9 is too big for memory..

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Интересно, а почему в I не проходило минимальное контролирующее множество? Вроде логичное решение.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +19 Проголосовать: не нравится

Ожидается ли выход "2011-2012 Самарский Международный Аэрокосмический Лицей, тренировка №3" на Blu-Ray? С бонусами типа: расширенный набор тестов, разбор в формате pdf, авторские решения с комментариями, фигурка natalia в масштабе 1/6.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится

у меня возникли небольшие проблемы с задачей L. Может кто-нибудь помочь? Делаю бин.поиск по ответу. код (надеюсь код видно)