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

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

Всем привет!

14 ноября, 19:30 MSK состоится Codeforces Round #212 (Div. 2), который был подготовлен коллективом авторов из Саратовского государственного университета в составе: Артем Седанов (FunkyCat), Сергей Сухов (Serega), Ольга Чикатуева (Helga), Дмитрий Зайцев (My-my).

Выражаем благодарность координатору раундов Геральду Агапову (Gerald) за полезные советы и Марии Беловой (Delinur) за перевод условий на английский язык.

Всем удачи и высокого рейтинга!

UPD1. В раунде будет использована динамическая система оценки сложности задач (см. здесь).

UPD2. Разбор задач опубликован здесь.

UPD3. Рейтинг обновлен. Поздравляем победителей, решивших по 4 задачи:

  1. CleRIC

  2. i_must_learn_matan

  3. Dshavn

  4. gzh1998n

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

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

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

    желаю участнику, занявшему 100 место, решить хотя бы 3 задачи :-)

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

      Не судьба. 100 место решило только две :)

»
10 лет назад, # |
  Проголосовать: нравится +16 Проголосовать: не нравится

И вновь увеличивается количество раундов, проведенных авторами с префиксом Sere

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

Sereja's round :D Hoping for a good increase again !!! Good-luck to all ...

»
10 лет назад, # |
  Проголосовать: нравится -6 Проголосовать: не нравится

Я бы даже сказал, авторов, удовлетворяющих regex-шаблону "Sere\wa"

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится -29 Проголосовать: не нравится

    Автор же не виноват, что его зовут СЕРЕга. Почему он должен брать себе другой ник, если уже есть некоторое количество СЕРЕжа, пусть даже и чаще его являющееся авторами раундов?

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

      P.S. не всегда ники совпадают с именами ;)

»
10 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Hope that we have an interesting contest. ^^

»
10 лет назад, # |
  Проголосовать: нравится -21 Проголосовать: не нравится

Динамика — это интересно!

»
10 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Problem statements of previous Serega's contest were horrible! I hope problem statements will be easy to understand!

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

А как же "По мнению авторов, задачи расположены по неубыванию сложности"? :(

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

I hope the problems will short for understand :)

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

Извеняюсь за глупый вопрос, я решил задачу "B", заблокировал ее. И теперь хочу взломать чье нибкдь решение.

Через "Положение" смотрю тех участников которые решили эту задачу и заблокировали ее. Когда я открываю ее, там например написано:

Претесты пройдены [претесты] → 5103228

что нужно сделать что бы попробовать взломать решение?

Когда нажимаю на ссылку "5103228", то нечего не происходит.

Может я что то не так делаю?

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

    Можно ломать решения только участников из твоей комнаты. Там сверху вкладка "комната" есть. В этом и фишка :)

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

      спасибо, я впервый раз только учавствую.

      Блин 4 мин. до конца контеста осталось, и меня взломали))

      обида...

»
10 лет назад, # |
  Проголосовать: нравится +23 Проголосовать: не нравится

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится -7 Проголосовать: не нравится

    Все задачи кроме "B" на Div 1 годятся.

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

      Задача A в принципе, не такая уж и сложная. Задача C понравилась. Жаль не успел написать :(

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

    Из текста картинки предположу, что в какой — то задаче надо было написать какой — нибудь жесткий алгоритм. Просветите, в какой? :D (Поток в Е не считается, там блин n <= 50)

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

      Что-то мне подсказывает, что считается:D (link)

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

        N блин 50. Можно было написать самый тупой минкост в 15 — 16 строчек за N ^ 5. Сложности в реализации нет, подойти к самой идее намного сложнее :D

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

      Имелась в виду задача E. Я считаю что даже простейший поток это не тема для Div 2. Да он элементарно пишется, но вот понять его полностью и доказать уже тяжелее. А запоминать алгоритмы можно только если это QuickSort.

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

        А, ну ты, скорее всего, прав. Полностью доказать это и правда сложно для Div — 2.

»
10 лет назад, # |
  Проголосовать: нравится +36 Проголосовать: не нравится

Зачем так гробить задачи?

»
10 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

It seems that the final judge in this contest is not sorted by submitting time !

»
10 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

Неужели все — таки чем ниже рейтинг проблемсеттеров, тем выше сложность задач в Div2 — Only?

»
10 лет назад, # |
  Проголосовать: нравится +15 Проголосовать: не нравится

Problem C and Problem E. Waiting eagerly for their editorial. Especially E, that was really beautiful.

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

    In E you can use min-cost-max-flow algorithm for some graph. Tutorial will be published soon.

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

Problem D can be solved with Union-Find, right?

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

This indeed was a fun contest. Problems were nice, they were composed in a way that it would be likely for contestants to make some mistakes which later could be hacked. :) Can anyone tell if third problem was solvable with a segment tree. That may not be the optimal way, but I guess it would pass.

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

Подскажите, в задаче А можно было заполнить две матрицы для каждого коня соответственно(1 — конь будет в данной позиции, 0 — нет), разбив матрицу на четыре подматрицы (начиная с положения коня) int k = 0; for(int i = x;i <= 8; i += 2, ++k){ if(k % 2 == 0) for(int j = y + k * 2;j <= 8; j += 4) f[i][j] = 1; else for(int j = y;j <= 8; j += 4) f[i][j] = 1; }

и потом сравнить как нибудь так?

bool merge = false; for(int i = 1;i <= 8; ++i) for(int j = 1;j <= 8; ++j) if(f1[i][j] == 1 && f1[i][j]== f2[i][j] && map_[i][j] != '#') merge = true;

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

    Нужно было посчитать количество ходов(а конкретней — четность этого количества) для достижения каждой клетки. В одну и ту же клетку нельзя попасть с разной четностью количества ходов — следует из особенности возможных ходов. Если два коня могут попасть в не закрашенную клетку с одинаковой четностью ходов, то ответ, очевидно, 'YES' — недостающие для какого-то коня ходы мы можем делать, двигая его туда-сюда, не теряя четности.

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

    Один из вариантов — поиск в ширину, подобно решению задачи http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=255&chapterid=163, для удобства используем четырёхзначные числа, как маски, обозначающие взаимное расположение коней (пускай у нас число abcd. a,b — координаты первого коня, c,d — координаты второго) и просматриваем все возможные переходы из начальной маски. Если среди всех найденных масок будут числа вида xyxy, то ответ, очевидно, YES, иначе — NO. Решение не отсылал, но, судя по ограничениям, должно работать.

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

»
10 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

Most of the solutions for problem B got accepted only because of pure luck. Solutions that use:

if(s[0]==1||s[m-1]==n)
{
    cout<<"NO\n";
    return 0;
}

should get 'Runtime error' becase m can be 0 :).

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

    You're wrong at least because almost all of theese people check this case like `if(!m){` ` puts("YES");` ` return 0;` `}`

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

    I tried to hack a solution using this but it didn't work. It depends on what value is at address s-1.

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

    this case is covered, check Test #8

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

    I do think that

    if(s[0]==1||s[m-1]==n)
    {
        cout<<"NO\n";
        return 0;
    }
    

    would pass, but (saw it while reviewing my own code)

    if(s[m-1]==n||s[0]==1)
    {
        cout<<"NO\n";
        return 0;
    }
    

    could cause RTE. If the first case is true, it won't produces a positive output without testing the another.

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

Good Problem set, with the wonderful dynamic scoring :) #loved it

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

Мне понравились задачи, спасибо автору. Жаль, 20 минут не мог найти багу в С: if (a[j] < a[i]) d--; (вычитал на одну инверсию больше, чем нужно) — лишняя строчка, без неё AC в дорешке.

Что касается Е — ну, поток и поток. Это не какой-то сверхсекретный или сверхсложный алгоритм. Я, будучи во втором диве, знал его. А по бложикам, периодически всплывающим на форуме на эту тему, можно понять, что и многие другие из второго дива также его знают. Ну и в конце концов, не всё же лёгкие алгоритмы писать.

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

in problem B, for the simple test case 1 1 1, which means that he does not have to make any move. My code gives output "YES", i.e. it is reachable, but the answer is "NO", why? I still think the answer should be "NO", for he managed to reach the nth stair. please help me understand if i am going wrong.

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

    read problem statment carefully

    "One has to note that anyway Petya should step on the first and last stairs, so if the first or the last stair is dirty, then Petya cannot choose a path with clean steps only."

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

      but for that case, he does not have to step, he was standing on the dirty stair.

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

        he got 1 stair which is dirty and he already step on it , how do you want to find a path with clean stairs only if the starting stair is dirty !!! read the problem again

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

          and his path should start from the next stair he steps to. I knowingly wrote in my code that if n equals 1, then he manages to reach.

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

задачи понравились!спасибо за контест!

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

Баг? Цвет — фиолетовый, а рейтинг — старый (1669)?

Пруф

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

In problem A, I tried marking every position K1 can go in matrix a,and every position K1 can go in matrix b. Then I checked for every post if(k1[i][j] && k2[i][j] && original!='#') . why did this algo gave wrong answer in test case 7?

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

    This is because they have to meet at the same time. An example is the test given in the statement.

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

    About problem A, I also want to ask for why the first board of test case 6 can output 'YES'? Could anyone help to explain it?

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

    Check out this case:

    ........
    ........
    ........
    ........
    ........
    ..K.....
    ........
    K.......
    

    Since the knighs move simultaneously they can never reach the same position. For every possible position they can reach one knight has to make an odd number of moves to reach that position while the other has to make an even number of moves. That means they can never be at the same position.

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

      Please tell me, how half-knights can meet on this map?

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

        Half-knights in both cases are on the one square.

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

        both of them go to 2, 2 then both of them go to 0, 0

»
10 лет назад, # |
  Проголосовать: нравится -9 Проголосовать: не нравится

UPD4: Ratings is fucked!

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

k = 0; new_rating = old_rating + k;

»
10 лет назад, # |
  Проголосовать: нравится +17 Проголосовать: не нравится

In problem B, problem statement says, "The second line contains m different space-separated integers...". But actual test cases did not have the second line if m = 0. That's reason why many answers written in script language got RE.

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

    Why it is so important to have the second line in test case if m=0 ?

    I believe that m=0 is enough to check if solution is correct for this case.

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

      Script language like Python or Ruby, there are no easy way to read integer tokens like scanf or iostream, so programs must handle input by lines and split them into integer list.

      Please compare these two submissions. 5103785 5103965

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

    Yes, I run into the same problem. I spend half an hour to check my program. Only after the contest do I know where the problem is with practice mode.

»
10 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Ratings are back ... yeyy, +168.

»
10 лет назад, # |
  Проголосовать: нравится -6 Проголосовать: не нравится

In problem C n^2 solutions have passed but my (n^2)(lg n) gave tle. :( . It passed the test case with n=4500 but gave tle with n=5000.

»
10 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Does any one except me used DFS for A ?!

I didn't understand the main solution but simulation worked perfectly ;)

Code

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

    My solution: if semiknights can meet in first step then "YES" and "NO" otherwise.

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

    I use a BFS.

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

    a better way is to check if (x2-x) mod 4=0 & (y2-y) mod 4=0 then the answer is "Yes" otherwise "No" :)

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

    a much easier algo is just to check if abs(x2-x1) and abs(y2-y1) are both divisible by 4, then answer is YES. if either of them not then NO.

»
10 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

I fail in the most simple test case, a graph with one node.

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

question of problem C: the third test data: 5 1 3 0 4 2 It can swap(0,2) to get '0 3 1 4 2',so this premutation only needs 3 times of 'swap',but why the standard answer is 4 ?

»
10 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

It would have better if pretests had less details especially at problem B like dirtiness of first or last stair ...

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

Пожалуйста можете объяснить один пример input 1 ...#...# ........ .#...K.. ........ ...#...# ........ .K...#.. ........ output YES Я не могу понять почему YES ведь клетка в которой они могут встретиться одновременно считается "плохой". Надеюсь на вашу помощь

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

    Они могут встретиться в клетке, где стоит один из коней, а клетки где стоят кони — хорошие

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится -8 Проголосовать: не нравится

These problems seem too hard for div2.

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

    EDIT: Deleted (I mistook the thread for round 214 :D)

    Well, E was quite hard, and A was definitely much harder than B. Other than that, it was all right.

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

Все прекрасно :)

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

    Разбор опубликован, ссылка на него приведена в посте. А код решений вы вполне можете посмотреть в статусе, в посылках участников.

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

а почему в задаче А на этот тест программа должна выводить "YES" ?

1 ...#...# ........ .#...K.. ........ ...#...# ........ .K...#.. ........

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

    На первом ходу полукони переходят в "плохую" клетку (5,4), а на втором вместе двигаются в одну из клеток, соответствующих начальному положению полуконей.