Автор RussianCodeCup, история, 8 лет назад, По-русски

Всем привет!

Последний в этом году шанс попасть в отборочный раунд Russian Code Cup предоставляется всем в это воскресенье, 5 июня в 16:00. Приглашаем всех, кто еще не прошел в отборочный раунд, принять участие. Удачи и до встречи на Russian Code Cup 2016!

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

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

Сделайте, пожалуйста, внеконкурсное участие. Или перестаньте присылать приглашения на почту тем, кто уже прошел в отборочный раунд.

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

Do you can check system faster? In the previous round we were waited about two minutes to know the results.

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

Curiously, did they fix the bug with problemset presentation? Or when the contest starts, we will see 1st-qualifiication's problems again?

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

Can someone who is not Russian participate ?? if yes Link to the contest website please .

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

    http://www.russiancodecup.ru/en/

    The problems are quite interesting, but mail.ru reinvented the wheel developing their own system, which turned out to be the worst Online Judge ever, so expect huge bugs and slow testing during the contest. If you don't want a t-shirt from them, you'd better just wait for the problems to appear on the CF Gym.

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

Это, а как задачи то сдавать? Нужно было перед началом соревнования зарегаться чтоль?

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

    Я даже растерялся, пацаны, шутки в голову не лезут.

    Вы серьезно, на ACM соревнование отдельная какая-то регистрация обязательная перед контестом?

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

      "Для участия в раунде нужно было зарегистрироваться заранее.

      С уважением, Команда Russian Code Cup"

      Сами свое говно пишите, что я еще сказать вам могу :D

      Я с вашими правилами могу в любое время согласиться.

      Ни одного предупреждения про это, ни одной логической причины сделать так, кроме вашей криворукости.

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

How can I submit solutions ? I am not seeing any submit button option.

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

Дико тормозит сервер.

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

Is there some problem with the judge?

My code runs fine offline and on ideone, but gets runtime error on test case 1 in problem D. I asked the jury, and they confirmed that Case #1 is indeed sample case..

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

Как решить первую и вторую задачу?

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

    1 задача:

    Посчитаем сколько площадь квадрата может быть уложена в площадь прямоугольника: k = (a * b) / (c * c). Теперь посчитаем 2 наиболее близкие площади: недостаточную k * (c * c), и избыточную (k + 1) * (c * c). Выберем ту, которая дает меньшую абсолютную разницу с a * b. Еще надо проверить, что недостаточная площадь больше 0 (если это не так, то вывести избыточную)

    using namespace ::std; 
    #include <iostream> 
    
    void solve(){
    	long long a, b, c, s1, s2, s3;
    	cin >> a >> b >> c;
    	s1 = a * b;
    	s2 = (s1 / (c * c)) * (c * c);
    	s3 = ((s1 / (c * c)) + 1ll) * (c * c);
    	if(abs(s1 - s2) < abs(s1 - s3) && s2)cout << s2 << endl;
    	else cout << s3 << endl;
    	
    }
    
  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится -13 Проголосовать: не нравится

    Вторая задача на реализацию.

    Просто напишем функцию, которая будет приравнивать строку s1 к строке s2: будем последовательно итерироваться по символам строки, начиная с 0-го заканчивая (n — 2)-ым. Пусть мы рассматириваем символ i: при равенстве s1[i] и s2[i], иначе инвертируем s[i] и s[i + 1] и прибавляем 1 к ответу. В конце проверяем строки на неравество (в этом случае ответ -1, иначе тот, который мы насчитали). Для пущей надежности можно запустить функцию 2 раза, свапнув аргументы и выбрать неотрицательный минимум. Мб это избыточно, но на AC не повлияло

    char not(char x){
    	if(x == '1')return '0';
    	return '1';
    }
    int cnt(string s1, string s2){
    	char c1, c2;
    	int ans = 0;
    	for(int i = 0; i < s1.size() - 1; i++){
    		c1 = s1[i], c2 = s2[i];
    		if(c1 != c2)s1[i] = not(s1[i]), s1[i + 1] = not(s1[i + 1]), ans++;
    	}
    
    	return (s1 == s2 ? ans : -1);
    }
    
    void solve(){
    	int n, ans1, ans2;
    	string s1, s2;
    	cin >> n;
    	cin >> s1 >> s2;
    	ans1 = cnt(s1, s2);
    	ans2 = cnt(s2, s1);
    	if(ans1 != -1 && ans2 != -1)cout << min(ans1, ans2);
    	else if(ans1 > -1)cout << ans1;
    	else if(ans2 > -1)cout << ans2;
    	else cout << -1;
    	cout << endl;
    }
    
    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Привести одну сроку к другой нельзя только тогда, когда одна от другой отличается в нечетном количестве символов.

      Доказательство: за один ход можно либо починить/испортить два символа (+2 или -2 к разнице между строками), либо испортить один и починить другой (+0 к разнице).

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

      Можно просто dp. В параметрах префикс и тип последнего символа.

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

For D we needed this, right? http://e-maxx.ru/algo/tree_painting Found it 5 minutes before the end :/

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

What's wrong with this solution for D?

Keep a BIT on the DFS order for prefix sums from root to the node. For updates, subtract 1 from those which lie in the subtree of the current node, and to answer query use formula val[a] + val[b] - 2 * val[LCA(a, b)]. Only corner case is that both nodes are children of same node that has already been deleted where answer is 2. I kept getting WA on case 7.

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

    There is no corner case. You just have to subtract 1 from everyone in the deleted node's subtree, including the node itself.

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

      Shit, I was doing exactly that initially, but had some bug so rewrote large part of it, and messed that up and came up with new logic :/

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

To D I copy-pasted both LCA and HLD summing on paths. But what is funny is that I didn't copy it from my library but from problem E from RCC week ago :P (however I could as well copy-pasted from library, but second round was closer in directory tree than library :P).

Week ago 120 minutes weren't sufficient for me to get a result sufficient for qualification. Today 8 minutes were enough :P.

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

Вторая задача в слегка более запутанной формулировке ровно три дня назад была на HackerRank.

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

Тот же код, который на RCC словил RE#16, на Codeforces получил AC... Какие могут быть причины для этого?
На RCC отправлял на MS VC++ 2013
На Codeforces отправлял на MS VC++ 2010
18259339

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

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

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

    Надо 8 вместо 6

    int Tree[600010];
    
    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Была такая мысль, но размер массива в нижнем слое ДО не превышает 199998 <= 2^18 = 262144. Тогда количество вершин во всем дереве не превышает 2^19 = 524288.

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

        Не-а, количество вершин то может и не превышает, но вот размер массива под дерево в худшем случае равен 4*количество вершин в нижнем слое (из-за особенностей из нумерации в массиве ДО

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

    Скорее всего за размер стека вылез.

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

      Может кому-то полезно будет, я прибавлял на отрезке так:

      const int SQ = 450;
      int add[SQ + 10];
      void Add(int l, int r, int by) {
      	for (; l <= r; ) {
      		if (l % SQ == 0 && l + SQ - 1 <= r) {
      			add[l / SQ] += by;
      			l += SQ;
      		} else {
      			vals[l] += by;
      			l++;
      		}
      	}
      }
      int getValue(int pos) {
      	return vals[pos] + add[pos / SQ];
      }
      
  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо всем, ошибка нашлась: действительно был выход за пределы массива, но не массива Tree, а массива edge.
    P.S. под валгриндом это не выявилось. Проверял с помощью Memcheck. Эта утилита не выявляет выход за пределы массива?

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

What's wrong with my solution? I used the same idea with the editorial, but instead of using a segment tree with lazy propagation, I used a trick with BIT that allow me to do range update, single node query (the same trick with this editorial, problem C div 1).

My solution

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

when will the editorial be out??