Изменения рейтингов за последние раунды временно удалены. Скоро они будут возвращены. ×

Автор awoo, история, 4 года назад, По-русски

Привет, Codeforces!

В 12.06.2022 17:35 (Московское время) состоится Educational Codeforces Round 130 (рейтинговый для Div. 2).

Продолжается серия образовательных раундов в рамках инициативы Harbour.Space University! Подробности о сотрудничестве Harbour.Space University и Codeforces можно прочитать в посте.

Этот раунд будет рейтинговым для участников с рейтингом менее 2100. Соревнование будет проводиться по немного расширенным правилам ICPC. Штраф за каждую неверную посылку до посылки, являющейся полным решением, равен 10 минутам. После окончания раунда будет период времени длительностью в 12 часов, в течение которого вы можете попробовать взломать абсолютно любое решение (в том числе свое). Причем исходный код будет предоставлен не только для чтения, но и для копирования.

Вам будет предложено 6 или 7 задач на 2 часа. Мы надеемся, что вам они покажутся интересными.

Задачи вместе со мной придумывали и готовили Адилбек adedalic Далабаев, Владимир vovuh Петров, Иван BledDest Андросов и Максим Neon Мещеряков. Также большое спасибо Михаилу MikeMirzayanov Мирзаянову за системы Polygon и Codeforces.

Удачи в раунде! Успешных решений!

Также от наших друзей и партнёров из Harbour.Space есть сообщение для вас: Harbour.Space

Привет, Codeforces!

Мы рады сообщить о замечательной возможности работы и учебы с Vodafone.

Компания Vodafone Group в партнерстве с Harbour.Space University предлагает стипендии для получения степени бакалавра и магистра в области компьютерных наук, информатики, кибербезопасности и разработки программного обеспечения, а также магистра бизнес-администрирования, и опыт работы в одной из ведущих телекоммуникационных компаний Великобритании.

Vodafone Group открывает новый технологический центр в Малаге, международный центр передового опыта, посвященный исследованиям и разработке технических решений, таких как безопасные сети, разработка 5G и 6G, Open RAN, IoT, MPN & MEC и UCC для Vodafone Business, платформ и корпоративных решений.

Мы ищем различные позиции от младшего до среднего (или старшего) звена в различных областях, таких как:

  • Front-end разработка
  • Full-stack разработка
  • Backend разработка
  • Техническая архитектура
  • Архитектура предприятия

Harbour.Space

ТРЕБОВАНИЯ К ОБУЧЕНИЮ

Общие требования:

  • Аттестат о среднем общем образовании или диплом бакалавра (предыдущий опыт работы обязателен при подаче заявки на получение степени магистра)
  • Резюме или профиль LinkedIn (ваш рейтинг Codeforces должен быть внесен в ваше резюме)
  • Свободное владение английским языком (испанский приветствуется)

Требования для Frontend разработчика:

  • Опыт работы в Angular не менее 1-3 лет.
  • Опыт работы в React не менее 1-3 лет.
  • Уверенное знание основ веб-платформ: HTML, JavaScript и CSS.
  • Разработка и внедрение приложений с низкой задержкой, высокой доступностью и производительностью
  • Определение/построение конвейеров CI/CD с использованием таких инструментов, как Jenkins, Sonar, Kiuwan.

Требования для Full-Stack разработчика:

  • Минимум 3 года подтвержденного опыта разработки платформ (среда на основе CDI/DevOps). С одним или несколькими из следующих:
  • Java SE/ Javascript
  • Сценарные языки, то есть python, perl, shell scripts.
  • Подтвержденный опыт работы с backend и frontend программными системами и веб-приложениями.
  • Подтвержденный опыт работы с HTPP, MQTT, LwM2M, Kafka, различными базами данных (SQL и не-SQL).
  • Знание облачной разработки.
  • Практический опыт работы с инструментами CDI.

Требования для Java разработчика:

  • Отраслевой опыт работы с программными платформами в Linux, локально и в облаке
  • Хорошее понимание серверных технологий
  • Сильные академические знания и профессиональный опыт разработки программного обеспечения: Java Enterprise, Oracle, Linux, Windows
  • Хорошее понимание инструментов системного мониторинга и сред автоматизированного тестирования
  • Опыт работы с SQL, XML, JSON и CSV
  • Опыт предоставления и поддержки преобразований и API для клиентов и партнеров
  • Хорошее понимание баз данных — Oracle, MongoDB, ElasticSearch.
  • Хорошее понимание фреймворков Java, SpringBoot, Spring technologies
  • Хорошее понимание контейнерных систем (docker) и оркестраторов (docker compose, Kubernetes) и технологий обмена сообщениями, kafka, rabbitmq
  • Хорошее понимание оболочки Unix, Perl, python для выполнения задач автоматизации и обслуживания, а также среды CI/CD
  • Образование на уровне бакалавра в области телекоммуникаций или смежных дисциплин с опытом разработки программного обеспечения
Подать заявку →

Желаем удачи и до встречи в следующий раз!

Harbour.Space University

UPD: Разбор опубликован

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

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

Good luck for Everyone

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

Finally a Div2 Edu Round :)

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

Maybe I am gonna be a pupil this time! Hope a nice problems.

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

I don't know why I like educational rounds so much.

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

    I tend to do worse on educational rounds for some reason, probably because I have trouble with 'classical' problems. I think edu is very high quality, and I'm impressed how many good problems they can come up with in such a short time frame.

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

hope for a good contest, not speedforces .

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

Good luck everyone! Удачи всем! Hemmäňize üstünlik!

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

All the best Everyone!

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

Good luck for Everyone

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

Geez, they don`t expect much out of the candidates, do they?

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

Hope to become BLUE at least today.

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

Do we get solutions of these questions after contest is over anywhere??

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

It's annoying when you passed the given test and it fails on some other test case which you can't even see!!!

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

problem A is very easy but B I can't solve it XD!

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

I'll die doing C

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

C was annoying

but D was very great and nice

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

In normal Div.2 contests when I re-submit a problem that was previously accepted, I get penalty and the previous one gets skipped. But in this round it didn't happen when I re-submitted. Can someone tell me why?

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

Is today's C related to : https://mirror.codeforces.com/contest/920/problem/C ? How to solve C? T_T

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

    First, remove all occurrence of '$$$b$$$' and check if they are same. Second, find each occurrence of each non-'$$$b$$$' character in both $$$s$$$ and $$$t$$$. If it is a '$$$a$$$', it must appear in $$$s$$$ no later than in $$$t$$$. If it is a '$$$c$$$', it must appear in $$$s$$$ no earlier than in $$$t$$$.

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

    It's more of a proof problem. I'm not sure tho.

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

      can you pls explain your approach?

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

        S--->T Because a cannot be swapped for c, each char 'a' in s and t must have the same number of char 'c' on the left and right sides ( sequence wise for every a in s & t) Second, we can't change ba to ab, thus for each a in s and t, no of b in left of a in s <= no. of b in left of a in t (sequence wise for every a in s & t). Finally, because we can't exchange cb to bc, thus for each b in s and t , no of c in left of b in s <= no. of c in left of b in t (sequence wise for every b in s & t).

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

        It's essentially the same with Aging1986's solution. But, I didn't think of deleting the $$$b$$$'s. Observe that $$$a$$$'s can only move to the right, while $$$c$$$'s can only move to the left. This means that when iterating from left to right, the number of $$$a$$$'s in $$$s$$$ must always be greater than or equal to the number of $$$a$$$'s in $$$t$$$. Similarly, the number of $$$c$$$'s in $$$t$$$ must always be greater than or equal to the number of $$$c$$$'s in $$$s$$$. Then, also notice that $$$a$$$'s and $$$c$$$'s cannot swap. Meaning, in between $$$c$$$'s, if they exist, there will always be the same number of $$$a$$$'s. Similarly, in between $$$a$$$'s, if they exist, there will always be the same number of $$$c$$$'s. That is why Aging1986 "deleted the $$$b$$$'s". I had a different way of checking that. Every time both the numbers of $$$a$$$'s or $$$c$$$'s, in $$$s$$$ and $$$t$$$, increases, I must check if the previous numbers of $$$c$$$'s or the previous numbers of $$$a$$$'s, respectively, is the same.

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

Can anyone help with C?

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

    There seem to be more solutions to C. I'll explain mine.

    First, we need to make a few observations:

    1. both strings s and t should have equal amounts of 'a', 'b', and 'c'
    2. 'c' cannot be moved towards right in string s (So, each 'c' in s should be present towards the right of its counterpart in string t)
    3. 'a' cannot be moved towards left in string s (So, each 'a' in s should be present towards the left of its counterpart in string t) by doing the given operations.

    Let's start with the observation#2:

    To move a 'c' towards the left from index i to j(j < i), the range [j, i-1] should have all 'b's. Try moving each 'c' in s to its correct position in t. If we cannot move a 'c', we cannot convert s to t.

    Now, all 'c's should be in their correct positions(if possible)

    Similarly, with the observation#3:

    To move a 'a' towards the right from index j to i(j < i), the range [j+1, i] should have all 'c's. Try moving each 'a' in s to its correct position in t. If we cannot move a 'a', we cannot convert s to t.

    Now all 'a's should be in their correct positions(if possible)

    Since all 'a's and 'c's are in their correct positions, now we just need to check if all b's are there in their correct positions and determine the answer.

    Implementation:

    To check if a range contains all b's and make point updates while moving a character from one index i to j(the move is a direct swap of s[i] and s[j] and not actual swaps between adjacent characters to reach the destination), we can use Segment Tree with range query and point updates.

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

    hope my implementation using stack give you some hint :-160349549

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

Worst round since last Month.

Upd. Change my mind:

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

Please explain the solution to the problem D; Thanks :)

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

    Double binary search. First binary search to find the point where a new alphabet first shows up in the string (counting from the left), and then, we iterate through the string from left to right. For each character of the string, we save the last occurrence of the letter, and to determine the unknown character, we do a binary search on the array of indexes of last occurrences to find the index at which the unknown character does not contribute to the number of distinct characters. This should yield a $$$O(26logn+nlog26)$$$

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

    We are going to use binary search.

    Imagine you are trying to figure out index ith, and imagine you already know all characters from 0th to (i — 1)th.

    you can add all the right most index of each character that you have found in an index array, this index size is at most 26. You are going to binary search on this index.

    let say you are considering index jth before ith. if from j to i — 1, the index at i already appears, then you have the same count from j to i — 1, and j to i, bc ith doesnt add anything new. So you can binary search the right most position where this is true, then you can find an index j that is the same with i. so each binary search check, you can check the count from mid to i — 1 and mid to i, mid to i — 1 can be updated after every ith, so it's free. If you can't find this then you can use the first query.

    the total used is at max 6 * 10, you only use 5 times in the binary search, at only use the first type when there's a new character.

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

    Shortly, you restore the characters of s from left to right. The first character is restored by query "? 1 1". For each of the next characters, let's ask if this character is new (by query "? 2 1 i"). If it's new, ask "? 1 i"; otherwise, find the previous occurrence of the i-th character with binary search.

    To run only 5 queries of type 2 in binary search, you can see that we are interested in segments of type $$$[last_c, i]$$$, where $$$last_c$$$ is the last occurrence of some character on the prefix we know.

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

    Keep track of known letters and their last positions. Build the string up from the front by querying the entire string up to that position to find out if its a new letter (if it is then use query type 1 to find out what it is) otherwise do a binary search with the array of last positions to work out which letter it is.

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

D << C

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

E was a nice question with 2 parts to it. How to solve F though?

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

How to solve F?

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

Since D requires stupid observations and E,F are unsolveable, todays edu was like speedforces.

Usual edu rounds where mostly implementation based problems, I liked that.

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

How to solve D? was D binary search on last unique characters encountered so far?

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

What is test case 10 of E?

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

A and B are TOO EASY as Div.2 AB.

But for Div.2 level contests you don't expect this kind of easy problems so you will spend some time on thinking again about A and B before submitting them, but this will cause your ranking become low and it is VERY disturbing.

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

What's wrong with my sol of problem D. It's showing WA on tc 9 160357208

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

Is there a way to solve D without bsearching at every iteration? Feels like there should be an easier way to do it.

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

Problem C & D, Easy to come up with the solution but frustrating to implement it !!

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

Someone hack my C, https://mirror.codeforces.com/contest/1697/submission/160337496, I think it should give tle for large test case

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

This was a nice round, but what I don't understand completely is that my solution of Problem B passes in C++, but does not pass in Python (due to Time Limit). I think that in educational rounds it should not matter which language is used if the idea is correct. But, yes, probably, it is too difficult to check it for multiple languages.

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

What's the testcase 8 in problem D :(

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

Problem C & D, Easy to come up with the solution but frustrating to implement it !!!!!

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

solved

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

is problem D inspired from this ?

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

When and where can I get the solutions?

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

Is there any way to increase the speed, it's TLE with Java on problem B ! 160296826

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

    I've replaced Arrays.sort with counting sort.

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

    You can also use boxing from int to Integer, 'cause objects (of class Integer, for example) are sorting with MergeSort (worst time NlogN), but primitives are sorting with QuickSort (medium time is better, but worst time is N^2).

    public static void sort(int[] a) {
        int n = a.length;
        Integer[] arr = new Integer[n];
        for(int i = 0; i < n; i++) arr[i] = a[i]; //copy int array to Integer array
        Arrays.sort(arr); //sort Integer array
        for(int i = 0; i < n; i++) a[i] = arr[i]; //copy Integer sorted array to int array
        //worst time is NlogN
    }
    
»
4 года назад, скрыть # |
 
Проголосовать: нравится -54 Проголосовать: не нравится

I don't really see the benefit to require 6000 operations in D instead of 27000, from an algorithmic point of view it seems a bit weird to ask for a constant factor <10, as for the quality of the problem the answer is obviously binsearch, so it adds no more thinking but only risks of missing it, and potentially more time and WA spent for the same problem. That will either prevent you from ACing it or spending more time on more interesting problems.

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

Can anyone explain for Problem B ( PROMO ) , what happens if x == y? I am confused as if x == y then we need to purchase x+1 items as one purchase will be done and rest items sum will be answer. Can anyone clarify it.

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

    Think of it this way: you pay for the x most expensive items first, and then because of the offer, the store refunds you for the first y cheapest items of your purchase. because x = y, so you don't need to spend a penny after the refund.

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

Can C be solved by using this idea?

First I check if all frequency of some letters are not the same, then it's impossible to form $$$t$$$

Then, I try to move all c to the front. Assume that :

  • In original string $$$s$$$, we have c at position $$$c_1 \lt c_2 \lt ... \lt c_k$$$
  • In final string $$$t$$$, we have c at position $$$c'_1 \lt c'_2, ... \lt c'_k$$$

My claim : It's optimal to move c so that $$$c_i$$$ moved to $$$c'_i$$$

I just need to check that for each $$$i$$$ :

  • value of $$$c_i \gt c'_i$$$ (because we can only move c to the left)
  • there are no a between $$$c'_i$$$ to $$$c_i$$$ (since a cannot be swapped with c)

Then I do the same for a, but I try to move a to the back. I got WA but not sure what case breaks it

My implementation : 160335858

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

Here is my submission for problem D https://mirror.codeforces.com/contest/1697/submission/160344339 . The problem states that: "In case you ask too many queries, or the jury program fails to recognize your query format, the answer to your query will be one integer 0. After receiving 0 as the answer, your program should terminate immediately — otherwise you may receive verdict "Runtime error", "Time limit exceeded" or some other verdict instead of "Wrong answer"." The jury program gave me verdict WA, but it also said (in the testcase 10) that i asked too many query type 2. This is unfair, I finished coding problem D when I still had more than an hour to debug.

Edit: actually less than an hour, my mistake xD

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

    same, make the round unrated

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

    This is how interactive problems work — not only on CF, but in official ICPC contests as well. There is no separate verdict for exceeding the number of queries (what should it be? RE, TL, something new?), so the WA verdict is used for it almost everywhere.

    Note that the phrasing in the problem is "you MAY receive some other verdict", not "you WILL receive". This is due to the fact that, in interactive problems, two separate programs are used to judge your submission, and in some occasions, their verdicts can be different (for example, the interactor says that you should get WA for sending too many queries, but then your solution crashes or spends too much time, so it's eligible for WA/RE/TL). That's why you should terminate your program immediately after receiving the response "your query is incorrect", which you don't do.

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

      please quote fully it says "you may receive some other verdict INSTEAD of wrong answer". It may be possible that my English is just bad but to me this statement means that you can receive any verdict on exceeding queries but not a WA.

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

      Thanks for the informations. However, such things are beyond newbie's level for myself (and some other contestants too, I undertood it after reading your comment though). I mean yes those might be compulsive for highly-rated contestants. But contests are for everyone, I don't think every div2-D-solver should have already taken those into account, some of them might just take contests for fun and have a passion for problem-solving for instance. With all being said, I acknowledged that it was my fault for not checking the number of queries, and furtherly understood how computers work to a certain extent (I'm really thankful and appreciate those informations), but the contest organizer could have done better not to confuse a lot contestants, including myself (I had suffered a lot of emotional damage debuging my code for that problem ngl xD).

      That was just my opinion, also English is not my mother tongue langague so please excuse me for any grammar or spelling error.

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

        Usually it's best just to do what the problem statement says you should do. The problem says that you should terminate your program after getting a $$$0$$$ in response to the query, or otherwise some strange things may happen — so you wouldn't have experienced this issue if you handled this case in your solution.

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

          The word "should" might be used for illustration of meaning "the program will be like this like that" or something similar (I have experienced that while doing some cf problems ngl). Also it didn't say those verdicts are "strange things". As I have already said, contests are for everyone, not only for the experienced. So why wouldn't they make everything clear so that everyone can understand? Mistakes are inevitable, but they should be acknowledged. I am just telling my opinion, no offence here.

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

            Sometimes it's impossible to make everything clear for everyone, unfortunately. I used this exact wording in one of my previous interactive problems, and there were no issues about that. Maybe I'll change the wording for future interactive problems, considering the feedback from this contest.

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

          By the way, just for clarification, immediately terminating after getting response '0' will also lead to WA verdict, won't it?

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

    I didn't see you check 0 as return value, so the verdict will be WA.

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

    yes exactly this statement is the reason why I spent ~1.5 hrs thinking that either my logic or my implementation was wrong. It literally says that you will get "Some other verdict instead of Wrong answer"

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

    I don't understand what you mean — this simply means that if your program is wrong you might get any verdict. You don't need to check 0 in case your program is correct

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

    Better count the queries in code, and put an assert statement in end to get RE instead of WA

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

how to do c?

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

    S--->T Because a cannot be swapped for c, each char 'a' in s and t must have the same number of char 'c' on the left and right sides ( sequence wise for every a in s & t) Second, we can't change ba to ab, thus for each a in s and t, no of b in left of a in s <= no. of b in left of a in t (sequence wise for every a in s & t). Finally, because we can't exchange cb to bc, thus for each b in s and t , no of c in left of b in s <= no. of c in left of b in t (sequence wise for every b in s & t).

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

Can someone please explain me why my solution 160333877 gives TLE? From the code the complexity seems like nlogn. Thanks

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

.

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

Wasted 30 mins on C because of a single "break". How careless I am! :(

Anyway,the problems are fantastic!

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

I got the solution idea for problem D from the constraints.

  • First, we can use the first type of query at most 26 times. That indicates that we will use it to know the indices of the first appearance of each character.

  • Second, we can use the second type of query at most 6000 times. After trying some calculations, I found that the nearest calculation to 6000 is 1000 * log_2(26) which is approximately equal to 5000 or smth like that. So, then I came up with solving it using binary search.

Honestly, I think this problem is very interesting!

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

I kept getting WA 7 in problem D so I though that i am not exceeding the number of allowed queries. (because the statement mentioned that I should get some verdict other than WA in this case)

so I was looking for a bug in my code instead of my idea I also added assert to the response to make sure ites not 0 as the question suggested which means not breaking the roles

and after the contest finished I found out that its wrong because it exceeded the allowed queries -_-

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

import java.util.*; public class PalinInd { public static void main(String args[]) { Scanner sc=new Scanner(System.in);

int n=sc.nextInt();
     long q=sc.nextInt();
     long arr[]=new long[n+1];
     arr[0]=Integer.MIN_VALUE;  
     for(int i=1;i<=n;i++)
       arr[i]=sc.nextInt();
     int arr1[]=new int[n+1];
     arr1[0]=0;
     int p=1;
    long s=0;
     Arrays.sort(arr); 
     for(int i=1;i<=n;i++)
     {
       // s=s+arr[i];
        arr1[i]+=arr1[i-1]+arr[i]; 
        //arr1[p++]=s;
     }  
     for(int j=1;j<=q;j++)
     {
         int x=sc.nextInt();
         int y=sc.nextInt();
         int val=n-x; 
         System.out.println((arr1[val+y])-(arr1[val]));
     }
  }

} why my code give tle in 3rd test case in java??please answer

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

A to D are good. Problem E seems interesting, will give a try later.

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

It seems like the observation of E is easier than D,but I dont have enough time..

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

What's the different between F and k-sat?

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

https://mirror.codeforces.com/contest/1697/submission/160338205 This is my submission for problem C. It fails on test case 407 of main test 2, which isn't visible (only the first 110 lines are visible on the page). Could anyone tell what test this solution fails on?

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

B task is almost similar to this one

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

I love getting rank 3000+ because i solved D and i was unable to solve C, and i am getting passed by people who solved C with O(n^2), feels great and fair :)

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

Would like to see a great solution for C. My solution requires complicated proofs and cumbersome implementations. Not sure whether I was in a hard and stupid direction again.

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

    The simple solutions of C are based on two observations: the subseq of 'a's and 'c'c in both strings must be same. And the positions of the 'a's (and 'c's) must be so that they can be moved in the desired direction. That makes it possible to implement it with only simple loops.

    example 160322407

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

    Let's assume that two characters did not match when passing through C and T. We have two options when it can be fixed. 1. s[i] = 'a' and t[i] = 'b'. Then we need to find the next b and swap it with s[i]. This can be done only when between this symbol b and our s[i] all characters are a. 2. s[i] = 'b' and t[i] = 'c', etc., only instead of a, b — b, c. All this can be quickly implemented, for example, by creating a set of indexes for each letter and using upper_bound to recognize the next letter. If anything, English is not my native language, I write through Yandex translator. My code (on c++): https://mirror.codeforces.com/contest/1697/submission/160320598

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

Anyone please tell me what is wrong with in my submission for C. It is giving WA on test 2. I can't even see that case

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

the guy's solution is weird 160366565
It seems to be written like this on purpose and then hacked by others.

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

For problem B, I used Arrays.sort() and got TLE but after only changing code to work with Collections.sort() it passed. Why is this?

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

good contest

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

I suspect a problem with problem B. Promo I made a very fast O(NlogN) solution using Java, and I got "TLE on test case 3". Since I knew for a fact it was fast enough, I wrote the exact same code logic using C++. It passed. I think the problem should have a second or 2 more, for non C++ users. Did anyone else encounter this problem?

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

Completely bricked C. Bye-bye rating :(

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

Hello, I found in the hacks that it appears as though a solution without prefix sums had passed the pretests on problem B (and then painfully got hacked). Is this intended, or did noone expect this passing the pretests? The submission of interest is as follows: 160341801

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

Could someone say me where my 160349731 failed for problem C. I collected all those places where there is a mistake in string. They should be even in number because there if a letter could be corrected by swapping, then the other letter in pair of it should also be in wrong position. Now going from smallest index to largest index (in the collected indexes). Suppose if 2nd index letter is 'b' and 1st is 'a' without any c between them (I calculated it by prefix sum difference between these 2 positions is 0) then I'll swap them and remove those two indexes from my que. Similarly for c and b pair. Note: if 2nd element in que is 'a' then you can't swap element in 1st position to correct place.

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

Often struggle with constructive algorithm problems in div2 C. Any suggestion for improving in this category will be appreciated.

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

I have somewhat different idea for C, Some observations we can make:

1)In string s, if we have a 'c' at some position,then characters to left of it always remain left and characters to right of it always remain right.Similarly in string t, if we have 'a' at some position.

2)From 1 we can immediately say that if there is index i such that s[i]='c' & t[i]='a' ,then answer never exists.

3)strings should be anagram of each other

Now suppose that i is first index where a 'c'occurs in string s and j is first index where 'a' occurs in second string,and since i!=j(2nd condition) ,wlog suppose i>j ,then we can use first i-1 characters of s to match first j characters of t,this can easily checked if count a,b,c in s till i-1 is greater or equal to count of a,b,c in t till j,now we reduce frequency count of a,b,c in string s. This works because till i-1 we have only 'a' and 'b' in s and since they can cross each other i would be able to achieve any configuration of 'a'and 'b' to match first j characters of t.Now we move to next 'a' in t(because i>j) and disregard first j characters of both strings For example:

bcaabababc

cbbababaac

we start from left i=2 and j=4 count of a,b,c in s=0,1,1 till i and count of a,b,c in t=0,2,1 till j-1 and count in t is greater or equal we move to next 'c'(because i<j) and disregard first 2 characters now i=10 and j=4, count a,b,c in s=4,3,0 till i-1 and count of a,b,c in t=1,1,0 .Again condition is true,we move to next 'a' in t. i=10,j=6 count of a,b,c in s=3,2,0 till i-1 and count of a,b,c in t till j is 1,1,0.Again condition comes to be true. move to next 'a' in t. i=10 j=8 (a,b,c) in s is(2,1,0) and in t is(1,1,0). Again true. move to next 'a' in t .in s (1,0,0) and in t (1,0,0) .Again true and we dont have any more 'a' to move for . and hence we terminate and we can say it is possible to interconvert s and t

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

When will the rating change?

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

When will Editorial out?

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

In Problem D , (Guess the string) while applying binary search , how you are deciding that whether you have to go left or right.

Can anyone please explain it ?

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

In problem D , (Guess the string) , while applying binary search how are you deciding that you have to go to left or right. Let's say: distinct characters(mid...i) == distinct characters(mid...i-1). Then we are sure that Str[i] = Str[mid]; Otherwise , you have to go left. (How can you say that you have to go left? ) Can anyone please explain it?

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

waiting for editorial.....

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

Почему мне, достоверному участнику, рейтинг до сих пор не начислен? (Сейчас у меня рейтинг — 1191)

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

Very slow system testing because most of people didn't use fast input. Please use it next time :)

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

O(n^2) solution passing for C. Seriously guys, is this what this has come to?

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

Could someone please explain why the same code gives AC for C when compiled with GNU C++17 (64) but it gives Runtime error when compiled with GNU C++17 ??

Correct soln: https://mirror.codeforces.com/contest/1697/submission/160348230

Incorrect soln: https://mirror.codeforces.com/contest/1697/submission/160432316

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

Why does my rank keep on increasing by a bit in the hacking phase?

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

Problem C was a nightmare. Tried so many things with "a" and "c" like counting inversions and removing "b" s and they did not work, ate so many penalties and finally went with valid parenthesis approach and still made more penalties because of forgetting edge cases

managed to solve it but ate 7 wrong answers. who else ?

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

I think my solution for problem C was cool. I turned s into a list of tuples by counting same characters in a row, i.e. aaabbaccb would turn into [('a',3),('b',2),('a',1),('c',2),('b',1)].

if there is a match I decrease 1 from current char, otherwise if there is mismatch and possible to fix, I would decrease 1 from the following tuple. i.e., if s=aaabb and t=babaa, Then [('a',3),('b',2)] would turn into [('a',3),('b',1)], then [('a',2),('b',1)], then [('a',2),('b',0)] (when zero I delete it) then [('a',1)], then [('a',0)] and done.

To check that a mismatch is possible to fix is easy. If the mismatch is a!=b, then I just check if the next tuple contains 'b'. Also, when I delete an element I merge two consecutive elements of same char. Also the listis actually reversed so I can pop() in O(1).

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

Why is it showing unrated for me?

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

Is it only me or the ratings for this round hasn't been updated yet for everyone?

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

Waiting for the rating to change.

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

the same code "copy & paste" :

TLE : 160442368

ACC : 160372033

How does this code get Acc with O(N ^ 2) where N is up to 1e5?

I see a lot of O(N^2) with Acc not only this

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

This is a more formal explanation of a solution to problem D.

Denote a query of type 2 by $$$ d(l, r) $$$, i.e. the number of distinct letters among $$$ s_{l..r} $$$.

First, find the first occurrence of every letter in the alphabet. They appear at index $$$ 1 $$$ and all $$$ i $$$ where $$$ d(1, i - 1) \lt d(1, i) $$$. Use queries of type 1 to find out the letters at these indices. There are at most $$$ d(1, n) \le 26 $$$ such indices.

Then, consider all prefixes of the string $$$ s $$$ in ascending order of length. Denote some prefix by $$$ p $$$ and its length by $$$ m $$$. Assume we know every letter in $$$ p $$$ already, now we will determine the next letter $$$ s_{m + 1} $$$. If we already know $$$ s_{m + 1} $$$ from the first step (because it is the first occurrence of a letter), we can move on to the next prefix.

Maintain $$$ c = $$$ set of letters in $$$ p $$$, and $$$ L $$$ = map of each letter in $$$ c $$$ to the index of its last occurrence in $$$ p $$$. Since $$$ s_{m+1} $$$ is not the first occurrence of a letter, $$$ s_{m+1} \in c $$$. Sort $$$ c $$$ by the value of $$$ L[c_i] $$$ in ascending order. We are looking for the last letter $$$ k $$$ in $$$ c $$$ where $$$ d(L[k], m) = d(L[k], m + 1) $$$, because it implies $$$ d(L[k] + 1, m) \lt d(L[k] + 1, m + 1) $$$ $$$ \implies s_{m+1} \not\in s_{L[k]+1..m} $$$ $$$ \implies s_{m+1} = k $$$. Note that we can compute $$$ d(L[k], m) $$$ instead of making a query. We can binary search for the required $$$ k $$$ in $$$ c $$$. Continue by setting $$$ p + s_{m+1} $$$ as the next prefix.

$$$ O(n \log 26) $$$ queries of type 2 are used.

I upsolved D here: 160441046

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

Auto comment: topic has been updated by awoo (previous revision, new revision, compare).

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

Problem D was so great !!! Thanks for this nice round :)

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

Just did problem E. Awesome problem!

First I noticed that the sizes of equal distance groups can only be 4 at most.

Then I noticed that you just need to keep a list of all points of minimum distance from you.

Then I noticed that the only way to color a few points the same color, is if they are all minimum distance from each other.

Then I noticed that a group (of min dist from each other) has to either be colored the same color, or all different, and this type of coloring is completely independent from the other choices for other groups.

From there it's straight forward, a dynamic programming depending on how many colors remain, and if you choose to color the group in the same color or all different colors (no other options). i.e. dp[number_of_group][colors_remaining][color_same_or_all_different].

Don't yet know its rating, but might be the highest rated problem I solved!

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

Finally specialist!!

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

Я никогда не писал раунд лучше этого!!!!!!

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

At problem C. Can anyone explain why I got TLE in the first submission and the other one doesn't?

Link 1: TLE submission Link 2: AC submission