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

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

Всем привет!

Этот контест был подготовлен в срочном порядке Артемом Раховым и другими участниками сборов в Петрозаводске от Саратовского ГУ. Пришлось оторваться от дорешивания, не пойти на лекцию Виталия Гольдштейна (не сердись, Виталий), но зато раунд подготовлен и мы ждем вас — участников.

Как говорится, "happy hacking"
MikeMirzayanov и команда Codeforces

UPD. Контест закончен, всем спасибо за участие. Победил участник из Китая winmad. Лучший участник вне конкурса: anonymous. Последняя задача контеста поддалась только ему, браво!

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

16 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится
не подскажете откуда получать входные данные на php? из формы? есть какой-нибудь пример? что-то я в решениях не нашел кода на нем.
16 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
С нетерпением жду расписание контестов на февраль :)
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
5 sec
16 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
Thanks for the nice problem C
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
#include <iostream>
using namespace std;

int b[100000];

int main()
{
b[100001] = 1;
cout << b[100001];
}
Почему этот код не получает рантайм при запуске?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Еще бы див1 также писать)
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Так, я сейчас вот здесь вижу проценты.
А время по уже проверенным видно где-нибудь?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Раньше в положении показывало себя выше или ниже таблицы. Сейчас специально убрали?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Есть какая-нибудь стратегия решения задач во время контестов? Я вот сколько участвую на конетестах , больше 2 не решал ни разу(( на 3 времени не хватает..
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    ну просто научиться решать быстрее, видимо.
    Многие, как можно увидеть по протоколу по 3 за 20 минут сдали.
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      спасибо))для этого наверное побольше задач надо решать
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Да уж, не помешает)
        • 16 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          неужели те кто так быстро решают задачи , делают это ТОЛЬКО из-за большого или даже огромного опыта ??
          • 16 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            ну смотря что такое огромный опыт:)
            математический склад ума не помешает также, знание языка, обучение у хороших людей)
          • 16 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +2 Проголосовать: не нравится
            Совокупность качеств:
            1) талант: без него будешь всегда в середничках или аутсайдерах;
            2) знания: чем меньше знаешь алгоритмов, формул, возможностей языка, тем меньше будешь решать задач; обратное вообще говоря неверно; см. также 1, 3 и 4;
            3) опыт: знание подводных камней, способов решения стандартных и часто встречающихся проблем;
            4) навык тестирования, отладки и внимательного кодирования;
            5) увлечённость (?).
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Надо научиться "видеть" идеи решения.
    Этому учатся либо опытом, либо с хорошими преподователями, либо умными книжками.

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

    Может помочь пытаться классифицировать задачи "геометрия", "теория чисел", "комбинаторика", "динамическое программирование" и т.д.

    Но обычно классифицировать можно только когда начал представлять как решать.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
What is final test 16 for B?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо авторам за контест. В последнее время div2 only контесты стали несколько сложнее. Плюс это или минус - судить не берусь.
Сегодня, как никогда, порадовали претесты. Обычно они пропускают все, что только можно. Сегодня претесты спасли многих. Особенная благодарность уходит составителями тестов (особенно тем, кто выбирал претесты из тестов).
16 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
Can someone please explain the solution for problem E?
16 лет назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

Спасибо создателям codeforces.

Классные соревы!!!

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Не могу понять, почему в 5 тесте задачи D у меня WA...
Вывод
ad6airnnpg
bad6jvcjsxfob
jvcjsxfo6quryai
qury6rnnpg
Ответ
ad6jvcjsxfob
airnnpg6qury
bad6jvcjsxfo
quryai6rnnpg

Разве 
ad6airnnpgbad6jvcjsxfobjvcjsxfo6quryaiqury6rnnpg
лексикографически больше, чем 
ad6jvcjsxfobairnnpg6qurybad6jvcjsxfoquryai6rnnpg
?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо за раунд!

Как проще всего решить задачу C?
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +1 Проголосовать: не нравится
    Для каждого дерева проверяем, каким будет первое/последнее деревья, если текущее оставить таким как есть.

    Ну и выбираем  при какой длине первого оставшихся одинаковыми больше всего.
    n-max это ответ
  • 16 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится
    Все время делить на минимальный делитель.

    UPD: извиняюсь, подумал что задача B.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Может быть немного не в тему: сегодня первый раз попробывал поучавствовать в подобного типа соревнований, до этого активно решал всякие архивы задач. Но как оказалось - для участия в соревнованиях этого мало. Надо как-то научиться не нервничать на соревнованиях и уметь очень быстро писать "простые-стандартные" вещи. Где можно этому потренироваться?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Может вам начать выкладывать решения хотя бы на каком нибудь языке в виде программы?  просто я например относительно новичок поэтому часто могу понять решения но при этом не знаю как его коротко и "правильно" осуществить.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Can any one explain the logic behind problem C ?
16 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
Are there going to be more competitions soon?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Очень хочется вот это.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
All of my accepted solutions gave runtime error in the final testing :(

Please tell my error...

And my solution for C got WA for pretest 6. I used the same algorithm as above.
16 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
Who can explain the main idea to solve E?
16 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

Just imagine columnar addition of the resulting numbers (from right to left).

You can use DP on state (carry, 1st number position, 2nd number position, 3d number position) with some modifications to avoid leading-zeros problems.

This DP has cycles, so I've used dijkstra.
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    I imagined all the numbers as 22-digit, possibly with leading zeroes. I used the same DP ( number of digits, number of digits used from A, B, C, should we add 1 to previous digit or not) using 3 constants that are first possible non-zero positions in A, B, C. I used binary search on total number of zeroes ( because this is what we must maximize ), tracked over all possible first non-zero positions with sum from binary search and tried DP to find out can we find the answer or not. 

    However, I didn't find a way to apply djikstra algorithm as what I implemented just gave the answer or said there is no possible answer for given first non-zero positions. Could you please tell more about how you applied djikstra?
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      All the numbers have at maximum 7 digits. My state is a position in initial number, not in the resulting number.
      Dijkstra is used due to DP <=> Graph analogy, i.e. state (0, 3, 2, 3) may have an edge to state (1, 3, 2, 3) and state (1, 3, 2, 3) may have an edge to (0, 3, 2, 3), and so there are possible cycles in my DP. You can either use 'simultanious' calculation of both states here (with some problems in output, caused by non-trivial output on edges like (1,3,2,3) => (0,3,2,3) => (1, 2, 1, 3) ) or use dijkstra to overcome cycle problems.
      (CO: lots of DP solutions are similar to shortest-path on DAG)
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        These cycle edges can be ignored because you can always set or clear carrying flag using only 2 additional digits instead of 3.
        • 16 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          1+99=0
          (0,1,2,1) => (1, -1, 1, 0) => (1, -1, -1, 0) => (0, -1, -1, -1)

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

            It's better to use example 3+99=2 because all numbers should be greater than 0.

            Yeah, my statement is correct only in middle of numbers and becomes wrong when one or both numbers are finished and we can get leading zeros for free. But in case of one finished number we still can set or clear carrying flag wasting only 1 digit instead of 2 or (if digits are 9 and 0) use both digits and postpone clearence of flag. So the only case left is when both numbers are finished and we can handle it separetly.

            P.S. This problem turns out to be tricky one, so may be your solution with Dijkstra is really less error-prone.

    • 16 лет назад, скрыть # ^ |
      ← Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится
      Something to add. (note that my solution is right-to-left on numbers)
      1. Global number of digits has no matter. I've changed them to edge cost.
      2. After that, leading zeros problem may be overcame with the next idea:
      we need 2 special states - 'all the digits from number are used' and 'a number is finished'
      The second means that you can only add '0' digit to the left (on zero cost!)
      The first means that you can add any digit on one cost.
      My solution just duplicates edges, but you can add an edge from the first state to the second with zero cost and no output on it.
      And then, remove any leading zeros from the result (we get them on zero cost).


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

goh tu in emtehanu!

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
а это..а разбора нигде нету,да?(
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
двух последних задачек) очень интересно.
16 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
D - изи
Дописываем в конец ко всем строкам входного файла разделить
Сортируем все строки
После этого идем по массиву, если строчка еще не взята - берем ее первой в пару, второй в пару берем первую подходящую по длине строку.
На выводе удаляем у второй в паре разделитель.
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Да в D главное было правильно прочитать условие...

    Проще всего создать 11 сетов: один общий, и 10 для строк конкретной длины (т.к. длина варьируется от 1 до 10).
    При этом к строкам действительно можно приписать к конце разделитель, и это будет правильно, т.к. длина каждой строчки ответа должна быть одинакова.
    Потом на каждом из n/2 шагов:
    1) Удаляем первую строку из общего сета и выводим ее.
    2) Удаляем ее из сета с строками нужной длины.
    3) Вычисляем, строка какой длины нужна ей в пару.
    4) Удаляем из соответствующего сета первую строку и выводим ее, но без разделителя в конце.
    5) Удаляем ее из общего сета.

    Собственно, это то же самое решение, что и у Анонимуса.
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо! Теперь понял.. Не внимательно прочел на счет "одинаковой длины"... А можно поподробнее на счет задачи С ? Не совсем понял почему именно так нужно делать как здесь писали??
      • 16 лет назад, скрыть # ^ |
        ← Rev. 2  
        Проголосовать: нравится +3 Проголосовать: не нравится
        Задача C

        Нужная расстановка имеет вид:
        1 2 3 .... 3 2 1, либо большая на константу.

        Нам дана расстановка a1, a2, ..., an.
        Найдем разницу:
        (1-a1) (2-a2) ........ (1-an).

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

        Еще нужно заметить, что числа в ответе не могут быть неположительными, так что должны быть выполнены неравенства ai >= min(i, n-i+1), i=[1,n]. Поэтому, если это не выполняется на каком-то индексе, можно поставить флажок, что для этого индекса мы ничего смотреть не будем.
        Если это не заметить, вы получаете неверный ответ на тесте 1 1 2 1 1 (ответ 3, а не 2), и по совместительству WA5 в тестирующей системе.

        Кстати, было бы интереснее, если бы тест 5 не был включен в претесты. Было бы много взломов - а это всегда весело!
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
No contests coming up soon?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А почему соревнований нет?