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

Автор cerealguy, 16 лет назад, По-русски
Всем привет.

Сегодняшний контест представляем мы: cerealguy и yaro. Некогда мы учились в одной школе, и с нами учился замечательный мальчик Володя. Именно он будет героем сегодняшнего контеста.
Володе предстоит побывать на кухне, посетить музей, попытаться взломать сейф, отправиться в необычный город и, наконец, использовать свои магические способности.

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

Надеемся, задачи придутся вам по вкусу.

Удачи!

Обновление. Частичный разбор задач.
  • Проголосовать: нравится
  • +40
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится -14 Проголосовать: не нравится
Удачи всем!
16 лет назад, скрыть # |
 
Проголосовать: нравится -18 Проголосовать: не нравится
Good luck to all!!
16 лет назад, скрыть # |
 
Проголосовать: нравится +12 Проголосовать: не нравится
I wanted to register for the contest 11 minutes before start and registration was closed. Why did you close it so fast? It would be better if it is closed 5 min before the start.
16 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится
How does one stop getting email/delete their account at codeforces.  I am not interested in any of the permitted languages, and am getting tired of the email.  There is no setting to turn off email, and no contact information.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
in the problem B,The black king might be able to take opponent's rooks at his turn,what is the meaning?is it that the black king can only take the opponent's rooks at his adjacent cells or he can take any rooks?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Is pretest 1 the same as sample test 1?
16 лет назад, скрыть # |
 
Проголосовать: нравится -78 Проголосовать: не нравится
its bull shit codeforces is sheer bull shit i wrote a solution to the problem that got accepted and in a moment i am told that mysolution is hacked y the fuck no measures are taken against the stealers i am ruined and i m not intrstd in solving any further
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
потом расскажите ктонить как D делать
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +16 Проголосовать: не нравится
    Одна из идей такая: так как все гамильтоновы пути проходят по каждой вершине один раз, давайте взвесим сначала не ребро, а вершину, а вес ребра будет суммой весов инцидентных ему вершин. Тогда если все ребра получатся разными по весу, то это и будет правильным ответом. Так как вес любого гамильтонового пути будет равен удвоенной сумме весов всех вершин. Остается только сгенерить веса вершин. Это можно попробовать сделать жадно. Дать вес 1 первой вершине. А дальше всем последующим вершинам давать такой минимальный вес, чтобы не получилось два ребра одного веса. Для 20 вершин, вес 20-ой вершины получится чуть больше 400. Поэтому веса ребер будут не больше, чем 1000.
16 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится
Anybody has some ideas for Problem B?
16 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится
Задача Е супер. Жаль когда я ее решил у меня оставалось всего 20 минут и я не рискнул ее писать - сделал 4 челленджа вместо этого
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
What happened with problem B, it was massive slaughter in the system test.
Are there maybe wrong tests in it?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Можно узнать тест 7 для задачи B?
16 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится
Well you had to add the magical part, Harry Potter is releasing soon!
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Можно узнать 7 тест для задачи C?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кстати по C отлично заходил метод популяций :o) Нежданчик!
16 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
Ура! Я стал жёлтым! :)
16 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится
Even CF couldn't avoid overflow:
http://mirror.codeforces.com/profile/tourist
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Скажите пожалуйста 7 тест на задачу С,я думаю он не только мне нужен.....:)
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Выше уже был, читайте внимательнее!
    • 16 лет назад, скрыть # ^ |
      Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится
      Да,спасибо,увидел.Хотя при ручном тестировании всё было ок(скорее всего изза рандома).
      Кстати только что сдал эту задачу.Вообще у меня был довольно простой жадный алгоритм,который обрезает циклы длиной 30 путём добавления к рандомным номерам.Брал 30, ибо думал что пару чисел по 2^30 будет именно сколько "убивать".Получил ВА7,потом обрезал циклы по 20 ,потом по 15,по 5,по 3 и...... прошло!!!!Удивительно,но больше чем 3 подряд операции над одним и тем же числом не обязательно выполнять,хоть иногда и выгодно.
      Невероятно,но факт.Надеюсь,что это поможет шаманам,вроде меня, которые писали жадный алго ;)
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Можно узнать пожалуйста 10й тест по D, а то у меня на нем ошибка представления данных (хотя вроде выводит все норм, донако насчет постоянства суммы не особо уверен)
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
How to do problem C ?
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    My solution got failed, but anyway I'll describe it( maybe someone can challenge it).
    I think greedy works here.

    -If you have an even number > 1 between two odd numbers -> -1
    -If you have an odd number > 1 between two even numbers -> -1

    If you don't then you must either:
    1)do a division, or
    2) a sum and a division
    for any pair of numbers that need it.

    repeat this until you end with 1 1 1 1
  • 16 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится +5 Проголосовать: не нравится
    Generally, you could first greedily decrease some of numbers to 1 few times until numbers that are left are very small. ( I decreased the maximal value until it was not greater than 10. Other possible variant is to decrease each of values to 1 just 3 times ). After that you should just use BFS on different combinations of numbers in code.  I also checked that I don't reach positions with values larger than 30 in my BFS (And for all tests I gave my solution number of moves was always less than 200 so maybe that check is not so important ). Main advantage of this approach is that it is unconditional and you don't need to check cases.
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +1 Проголосовать: не нравится
    Here is the greedy I used (passed, but I proved it by bruteforce):
    While you have a number different from 1:
    1) Find the maximal number.
    2) If it is even and has an even neighbour, divide. Otherwise, if it is odd and has an odd neighbout, increase them both, otherwise increase and any of it's neighbours.

    Why does it work: Each time before you divide, the total sum increases by 4 (after you make 2 additions, you're guaranteed to divide). So, with each division the total sum decreases (compared to the sum after the previous division) unless the biggest number is 4 and is surrounded by 2 odd ones. Those are not many cases, I just wrone the program and tested all of  them - received answers on all. If anyone can give a better proof, you're welcome.
  • 16 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится
    I had such an approach:

    while there is a number not equal to 1:
            if there is a pair of two even numbers:
                    divide them by 2;
            elseif there is a pair of two odd numbers(and at least one of them is no equal to 1):
                    increment both;
                    divide them by 2;
            else
                    find a pair with two different odd/even numbers(i.e. one is even, the other is odd or viceversa); 
                    increment both ;

    My solution failed tests because of the mistake in the last else statement: I wasn't looking for two numbers, instead just incrementing the first two so the test-case '1 1 1 2 1', or alike, killed solution. Afterwards I've changed it in the way as in the pseudocode, it has passed with flying colors.
16 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
I'm not sure I understand the concept of "hacking" here. Apparently in today's match tourist hacked MBabin's solution to problem B. But it shows that it also passed system tests, and he ended up getting full score for it, while tourist also gets score for the hack. What actually happened?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Можно тест 41 по задаче B?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо большое.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Только мне нужен шестой тест на задачу B ?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
я бы хотел 12 на В
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
а можно 10 на С?
16 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
Cпасибо за контест, отличные задачи! С и Е просто супер.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
any one can tell the 20th test case of problem B .

Thanks in advance
16 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
Как насчет уменьшить число человек в комнате, скажем в 1,5 - 2 раза?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
What is the algorithm for Problem D ? Seems like some small but nice idea ..
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится
    The idea is to assign some numbers ai to vertices and the lengths ai + aj to edges. Then the condition about hamiltonian cycles will be fulfilled. To ensure the condition about different lengths, just choose the numbers ai one by one so that it was always true that ai + aj ≠ ai' + aj'. In other words, when you choose a new number, it mustn't be equal to ai + aj - ak and ai - aj - ak, for any already chosen ai, aj and ak. It turns out that if n ≤ 20, this process never needs numbers more than 500, so all edges have lengths less than 1000.
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    We've put a link to the problemset analysis.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Why can't testcases be made available after a contest is over ?


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

Borscht aint Russian traditional soup. It originates from Ukraine