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

Всем привет!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

»
10 лет назад, скрыть # |
 
Проголосовать: нравится 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..

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

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

  • »
    »
    10 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -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;
    	
    }
    
  • »
    »
    10 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -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;
    }
    
    • »
      »
      »
      10 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

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

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

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

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

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

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

»
10 лет назад, скрыть # |
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
»
10 лет назад, скрыть # |
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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • »
      »
      »
      10 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 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];
      }
      
  • »
    »
    10 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

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

»
10 лет назад, скрыть # |
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

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

when will the editorial be out??