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

Автор MikeMirzayanov, 14 лет назад, По-русски
Контест перенесен на 15 минут. 

Спасибо всем за участие в Codeforces Beta Round #7. Надеюсь, вам понравилось. В комментариях предлагаю обсудить задачи и систему. Пожалуйста, выскажите ваше мнение, особенно если вы заметили какое-то неадекватное поведение системы. И как всегда я с интересом прочту предложения по улучшению.

С сегодняшнего контеста рейтинг по дивизионам для общих контестов будет считаться отдельно по двум таблицам положений участников. То есть подсчет рейтинга будет эквивалентен проведению двух контестов отдельно для каждого дивизиона по общим задачам.

Еще момент. Мне бы хотелось, чтобы кто-то взял на себя разбор задач прошедшего раунда. Это надо сделать на русском и английском языках. Разумеется вы должны сдать задачи либо на контесте, либо в дорешивании. Если у вас есть желание это сделать - пишите в комментариях. Ваш пост будет опубликован на главной и позже доступен по спец. ссылке из контеста.

Огромное спасибо авторам задач: RAD и e-maxx  подготовили и помогли провести контест.

Желаю высокого рейтинга,
MikeMrzayanov

UPD. Рейтинги обновлены. Решения доступны для просмотра.
  • Проголосовать: нравится
  • +19
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится
Сдал последнюю на 1:56:56 не успев прогнать очередную версию на семплах :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Can you please release the Test data?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
erase 0
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
I don't know, but I think that "erase 0" can help you )
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Символично на контесте e-maxx'а слизать расширенного эвклида с сайта e-maxx'а :оО
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
У меня вопрос кстати по задаче B. Компилятор MSVC на серве какой-то глючный. Я сначала 2 раза послал задачу B и у меня 2 раза была ошибка представления данных на 2 тесте. То же код посылаю под GNU C++, WA #20. Возникает вопрос, почему?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Is there any way to see more than one page of Status?
14 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
Большое спасибо авторам и организаторам!
Получил большое удовольствие!
14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
How can i see the others sources in this contest?

  • 14 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    After the contest, u can enter the contest problem set, and click the tab which show the number of solvers of the problem, then u can see the sources.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
i think , i saw problem C in CodeChef.com and SGU ,
what's different between them ?

problem in SGU : http://acm.sgu.ru/problem.php?contest=0&problem=106
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Why should there be any difference?

    This problem is quite standart application of linear Diophantine equations. :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Подскажите, пожалуйста, тест №3 на задачу B
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Контест неплохой. Задачи неплохие. Спасибо авторам.
Вопрос непосредственно к создателю, Майку Мирзаянову:
 - Вы сказали, что рекомендуете читать решения топовых участников. Планируете ли вы открывать решения участников или нет?
Не могу сказать, что испытываю в них острую необходимость, просто интересны планы.

Крошечные погрешности в интерфейсе:
    Когда начинается или кончается контест выскакивает окошечко с текстом: "YeZ", можно было бы изменить)
    Да, когда истекает любой счетчик времени, то в последний момент он показывает: "00:00:0-1". Мелочи.
Мне больше нравится решать самому, и уже если не получается раз в 5ый - читать разборы, такое бывает редко) Может и зря. Разборы просмотреть полезно, даже если решил сам) Но чаще я их не смотрю.
Но, в кодах иногда можно найти интересные приемы. Только топ кодер наталкивает на мысль, что ничего страшного в открытых кодах нет. Но в общем, люди не любят ими делиться с кем попало, и это тоже правильно.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Сделали бы функцию тогда, чтобы открывать для просмотра коды по желанию.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Можно поступить и так. Если у организаторов есть какие-то сомнения или мысли по этому поводу, то я попросил бы их высказаться и выставить данный вопрос на голосование. Если он, вообще, рассматривается, как вопрос.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Ну вообще тут код других участников можно смотреть,  они открыты после контеста
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        упс) почему-то в этом контесте других участников решения недоступны
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Сегодня откроют коды? А то спать тянет..
          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Еще интересно знать когда обновят рейтинг.  мне кажется это и то что неотрыты решения имеют общую причину.

            чето я как-то криво говорю(
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Зато судя по цвету (хотя я и так догадался), я уже оказался во 2м диве=)
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Рейтинг по-началу вроде обновили, но потом откатили. Но цвета у ников поменялись.
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Причина действительно общая, но техническая :) Не связанная ни с какими реджаджами.

              Не могу сказать, когда всё будет сделано

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
can i see any data?
14 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
Offtopic:
Нельзя ли хотя бы некоторые раунды проводить так, чтобы они не пересекались с тренировкой на neerc.ifmo.ru? ) Раунд #8 опять с ней пересекается
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Это как раз по теме) Только меня на нирке не регистрирует...
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Обычно регистрируют прямо перед контестами :)
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Я бился перед позапрошлым контестом час. Не зарегало. Потом пошел спать, потому что у меня не то что на контест, вообще, сил не было.
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          регают) просто не обновляется в том списке, я сам подобрал id вообщем для своей команды и использовал пароль который был сгенерирован системой
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ну что, может перенесете турнир на пятницу я тоже не могу в следующий четверг, как и в этот.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Дело в том, что у Центра олимпиадной подготовки СГУ тоже напряженный график и единственный день на недели, куда удается вставить раунд - это четверг. Я постараюсь что-нибудь придумать. Возможно, получиться проводить контесты в другой день, но пораньше. Только боюсь это уменьшит аудиторию соревнований.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Рейтинг вроде обновился. Не могу понять, почему с рейтингом 1501 я сержант, а не лейтенант?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
It is intresting to me, why Rizvanov got  more points than  Petr, though Petr was 1st and Rizvanov - third.
Or are points given at another system?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
по скольку рейтинг теперь отдельно по дивизионам считается, было бы не плохо иметь возможность видеть и результаты по дивизионам... ну, например, добавить в таблицу фильтр какой-нить, типа "все", "1 дивизион", "2 дивизион"...
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    таки он там есть ровно такой, как Вы пишете. В правом верхнем углу
14 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
I think this website would better if it own a forum.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
It would be awesome to view source code on the standing page.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Yes. The best way would be after double click to see submission history and if you can get source code from there. Now you can see submissions only from one page of status, there is no good solution of problem E at the moment :(
14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
sorry, I think this is not the place, nevertheless  I'm gonna ask it:

is there an available file ( or a way ) to download the problems and print them?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
- If I want to see say Petr's  solution , anyway to see it ?
- I entered the practice contest, but am only able to see the solutions of recently submitted people , not all the ones who submitted.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    You can use a URL like this:
    http://codeforces.com/contest/7/status/E?order=BY_ARRIVED_ASC
    If Petr took part in the competition, he will 99% sure appear in this list ;)
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    It seems that the functional Page Up/Page Down is not available yet.
»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

По поводу задачи C. http://e-maxx.ru/algo/diofant_2_equation Утверждается, что если c%g==0, то уравнение имеет решение, в противном случае не имеет. Доказательство следует из очевидного факта, что линейная комбинация двух чисел по-прежнему должна делиться на их общий делитель. Объясните, пожалуйста, почему она по-прежнему должна делиться на g?

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

    линейная комбинация двух чисел по-прежнему должна делиться на их общий делитель

    g = gcd(a, b)
    a = xg
    b = yg
    pa + qb = pxg + qyg = (px + qy)g

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

      Я, к сожалению, не вижу ответа на свой вопрос(или может я его неверно поставил). Хорошо, останется у нас слева g. Но почему требуется именно c%g==0?

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

        ax + by = c
        g = gcd(a, b)

        Если c не делится на g, то тогда левая часть уравнения делится на g, а правая — нет. Поэтому решений в этом случае нет

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

          А как левая часть может делится на g, если после домножения на (c/g), g в левой части (как и в правой) исчезает?

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

            ax + by делится на g, так как g = GCD(a, b). Поэтому ещё до решения каким бы то ни было алгоритмом можно сказать, что любая линейная комбинация a и b будет делиться на g.

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

Посмотрел решения участников по E, но так и не понял. Кто может дать идею?

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

How to solve problem D?

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

    Assume $$$0$$$-based indexing. Let $$$dp_i$$$ denote the degree of the $$$i$$$-th prefix. The length of the prefix, $$$len = i + 1$$$. Firstly, $$$dp_0 = 1$$$, since a $$$1$$$-length string is a palindrome.

    Now, to compute $$$dp_i$$$, firstly check to see if $$$i$$$-th prefix is a palindrome or not. If it is not a palindrome $$$dp_i = 0$$$. Otherwise if the prefix is palindrome, its degree would be = (degree of the first half + 1). So, $$$dp_i = dp_{\lfloor\frac{i-1}{2}\rfloor} + 1$$$.

    To check whehter the prefix of length $$$len$$$ is a palindrome, you have to check whether the substring on the first $$$\lfloor{\frac{len}{2}}\rfloor$$$ characters is the same as the reverse of the substring on the last $$$\lfloor{\frac{len}{2}}\rfloor$$$ characters. To compare substrings, you can use string hashing. One ways is to build prefix hashes on the string and its reverse to obtain hash of any substring in a O(1) time as described in this blog.

    The answer is simply $$$\sum\limits_{i = 0}^{n-1} dp_i$$$.

    Code

    • »
      »
      »
      10 месяцев назад, # ^ |
        Проголосовать: нравится -8 Проголосовать: не нравится
      #include<bits/stdc++.h>
      using namespace std;
      #define ll long long
      #define int long long
      int32_t main(){
          string st;cin>>st;
          int n=st.size();
          int m=1e9+9;
          int p=1;
          int mx=5*(1e6)+1;
          vector<int>pw(mx),pre(n),suf(n+1,0),dp(n+1,0);
          for(int i=0;i<mx;i++){
              pw[i]=p;
              p=(p*53)%m;
          }
          for(int i=0;i<n;i++){
              pre[i]=(pw[i]*st[i])%m;
              if(i!=0) pre[i]=(pre[i-1]+pre[i])%m;
          }
          string r=st;
          for(int i=n-1;i>=0;i--){
              suf[i]=(pw[n-i-1]*st[i])%m;
              suf[i]=(suf[i]+suf[i+1])%m;
          }
          dp[1]=1;
          int ans=1;
          for(int i=1;i<n;i++){
              ll tm=(suf[0]-suf[i+1]+m)%m;
              ll tm2=(pre[i]*pw[n-i-1])%m;
              if(tm==tm2) {
                  dp[i+1]=dp[(i+1)/2]+1;
              }
              ans+=dp[i+1];
          }
      
          cout<<ans<<endl;
          
      }
      
»
10 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
int32_t main(){
    string st;cin>>st;
    int n=st.size();
    int m=1e9+9;
    int p=1;
    int mx=5*(1e6)+1;
    vector<int>pw(mx),pre(n),suf(n+1,0),dp(n+1,0);
    for(int i=0;i<mx;i++){
        pw[i]=p;
        p=(p*53)%m;
    }
    for(int i=0;i<n;i++){
        pre[i]=(pw[i]*st[i])%m;
        if(i!=0) pre[i]=(pre[i-1]+pre[i])%m;
    }
    // string r=st;
    for(int i=n-1;i>=0;i--){
        suf[i]=(pw[n-i-1]*st[i])%m;
        suf[i]=(suf[i]+suf[i+1])%m;
    }
    dp[1]=1;
    int ans=1;
    for(int i=1;i<n;i++){
        ll tm=(suf[0]-suf[i+1]+m)%m;
        ll tm2=(pre[i]*pw[n-i-1])%m;
        if(tm==tm2) {
            dp[i+1]=dp[(i+1)/2]+1;
        }
        ans+=dp[i+1];
    }

    cout<<ans<<endl;
    
}