Изменения рейтингов за последние раунды временно удалены. Скоро они будут возвращены. ×

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

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

517A — Виталий и строки

Для решения данной задачи можно было, например, найти строку next, лексикографически следующую за строкой s и проверить, что строка next лексикографически меньше строки t. Если строка next оказалась меньше строки t, выведем ее и закончим алгоритм. Если же строка next совпала со строкой t, следовало вывести No such string.

Чтобы найти строку next, лексикографически следующую за s, нужно сначала найти максимальный суффикс строки s, состоящий из букв 'z', заменить все буквы 'z' в этом суффиксе на буквы 'a', а затем букву, стоящую перед этим суффиксом, увеличить на единицу. То есть, если перед суффиксом стояла, например, буква 'd', ее следует заменить на букву 'e'.

Асимптотика решения — O(|s|), где |s| — длина строки s.

517B — Таня и поздравление

Для решения данной задачи, сначала насчитаем массив cnt[], где cnt[c] — сколько раз буква c встречалась в строке t. Будем считать два числа ans1 и ans2 — сколько раз Таня прокричит УРА! и сколько раз Таня произнесет ОПА.

Теперь проитерируемся по строке s, и если cnt[s[i]] > 0, то прибавим к ans1 единицу и уменьшим cnt[s[i]] на единицу.

Теперь вновь проитерируемся по строке s. Пусть c это буква равная s[i], но в обратном ей регистре. То есть если s[i] = 'w', то c = 'W'. Теперь, если cnt[c] > 0, то прибавим к ans2 единицу и уменьшим cnt[с] на единицу.

Осталось вывести два числа — ans1 и ans2.

Асимптотика решения — O(|s| + |t|), где |s| — длина строки s, а |t| — длина строки t.

517C — Аня и смартфон

Для решения данной задачи будем хранить два массива — a[] и pos[]. В массиве a[] будем хранить текущий порядок расположения иконок, то есть в a[i] хранится номер приложения, иконка которого стоит на i-м месте. В массиве pos[] будем хранить на каком месте в списке находятся иконки, то есть в pos[i] хранится в какой позиции массива a[] находится иконка приложения номер i. Будем считать ответ в переменной ans.

Проитерируемся по приложениям, которые нужно открыть. Пусть текущее приложение имеет номер num. Тогда нужно к ans прибавить pos[num] / k + 1 (первый член суммы — количество движений пальцем, чтобы долистать до нужного экрана, второй член суммы — одно движение пальцем для открытия приложения). Теперь, если иконка приложения номер num не стоит на первом месте в списке приложений, сделаем следующее — поменяем местами значения a[pos[num]] и a[pos[num] - 1] и обновим значения pos[] для иконок приложений, чьи номера равны a[pos[num]] и a[pos[num] - 1].

Асимптотика решения — O(n + m), где n — количество приложений, m — количество запросов на запуск приложений.

517D — Илья и эскалатор

Для решения данной задачи воспользуемся динамическим программированием. Будем хранить двумерный массив z типа double . В z[i][j] будет храниться вероятность того, что через i секунд j человек зашли на эскалатор.

В динамике будут следующие переходы. Если j = n, то есть все n людей уже находятся на эскалаторе, тогда сделаем переход z[i + 1][j] +  = z[i][j]. Иначе, либо j-й человек зайдет на эскалатор в i + 1 секунду, то есть z[i + 1][j + 1] +  = z[i][j] * p, либо j-й человек останется на месте, то есть z[i + 1][j] +  = z[i][j] * (1 – p).

Осталось посчитать ответ (математическое ожидание количества людей на эскалаторе) — это сумма по j от 0 до n включительно z[t][j] * j.

Асимптотика решения — O(t * n), где t — на какой момент нужно посчитать матожидание, n — сколько людей сначала стоит у эскалатора.

517E — Артур и вопросы

Сначала заметим следующий факт. Возьмем первые две суммы a1 + a2 + ... + ak и a2 + a3 + ... + ak + 1. Должно выполниться неравенство a1 + a2 + ... + ak < a2 + a3 + ... + ak + 1. Если перенести справа налево все элементы кроме ak + 1, все они сократятся и останется a1 < ak + 1. Если выписать далее все подобные суммы получится, что последовательность распадается на k непересекающихся цепочек: a1 < ak + 1 < a2k + 1 < a3k + 1..., a2 < ak + 2 < a2k + 2 < a3k + 2..., ..., ak < a2k < a3k....

Будем решать задачу для каждой цепочки отдельно. Рассмотрим первую цепочку a1, ak + 1, a2k + 1.... Проитерируемся по ней, и найдем все пары индексов i, j (i < j), что a[i] и a[j] это числа, а не вопросы, в заданной последовательности, а для всех k от i + 1 до j - 1 в a[k] стоят знаки вопроса. Тогда понятно, что все эти вопросы нужно заменить на числа таким образом, чтобы не нарушить условие возрастания и при этом минимизировать сумму модулей поставленных чисел.

Понятно, что между индексами i и j стоит j - i - 1 знак вопроса, их можно заменить на a[j] - a[i] - 1 чисел. Если j - i - 1 > a[j] - a[i] - 1, тогда нужно вывести Incorrect sequence и закончить алгоритм. Иначе нужно жадным образом заменить все эти вопросы на числа.

Здесь возможно несколько случаев. Рассмотрим один из них, когда a[i] >  = 0 и a[j] >  = 0. Пусть текущая цепочка (3, ?, ?, ?, 9), i = 1, j = 5. Знаки вопроса нужно заменить следующим образом — (3, 4, 5, 6, 9). Осталось два случая, когда a[i] <  = 0, a[j] <  = 0, и случай, когда a[i] <  = 0, a[j] >  = 0. В таких случаях нужно поступать жадным образом, аналогично первому, не нарушая условие возрастания и минимизируя сумму модулей поставленных чисел.

Асимптотика решения — O(n), где n — количество элементов в заданной последовательности.

517F — Паша и труба

Будем решать данную задачу поэтапно. Сначала насчитаем два двумерных массива частичных сумм sumv[][] и sumg[][]. В sumv[i][j] хранится сколько решеток стоит в столбце j начиная со строки 1 до строки i. В sumg[i][j] хранится сколько решеток стоит в строке i начиная со столбца 1 до столбца j.

Посчитаем ans0 — сколько труб без изгибов можно проложить. Посчитаем количество вертикальных труб — проитерируемся по j от 2 до m — 1 и, если sumg[n][j] — sumg[n][0] = 0 (то есть в этом столбце нет ни одной решетки), прибавим к ans0 единицу. Аналогично посчитаем количество горизонтальных труб.

Посчитаем ans1 — сколько труб с 1 изгибом можно проложить. Переберем клетку, в которой будет изгиб (по условию эта клетка не должна лежать на краях поля). Возможны четыре случая: труба начинается слева, доходит до текущей перебираемой клетки и поворачивает вверх; труба начинается сверху, доходит до текущей перебираемой клетки и поворачивает вправо; труба начинается справа, доходит до текущей перебираемой клетки и поворачивает вниз; труба начинается снизу, доходит до текущей перебираемой клетки и поворачивает влево.

Рассмотрим первый случай — труба начинается слева, доходит до текущей перебираемой клетки и поворачивает вверх. Пусть клетка поворота находится в i-й строке и j-м столбце. Тогда к ans1 нужно прибавить единицу, если (sumg[i][j] — sumg[i][0]) + (sumv[i][j] — sumv[0][j]) = 0. Для оставшихся случаев нужно сделать аналогичным образом.

Осталось посчитать ans2 — сколько труб с 2 изгибами можно проложить. Поступим следующим образом. Посчитаем сколько труб начинаются сверху и заканчиваются сверху или снизу, и прибавим это число к ans2. Затем повернем матрицу три раза на 90 градусов и после каждого поворота прибавим к ans2 количество труб, начинающихся сверху и заканчивающихся сверху или снизу. Если считать таким образом, каждая труба посчитается по два раза, поэтому ans2 нужно поделить пополам.

Как посчитать для текущей матрицы сколько труб начинаются сверху и заканчиваются сверху или снизу. Насчитаем четыре двумерных массива lf[][], rg[][], sumUp[][], sumDown[][]. Пусть i — номер строки, j — номер столбца текущей клетки. Тогда в позиции (i, lf[i][j]) в матрице находится ближайшая слева решетка для клетки (i, j), а в позиции (i, rg[i][j]) в матрице находится ближайшая справа решетка для клетки (i, j). В sumUp[i][j] должно быть число — сколько столбцов без решеток содержится в подматрице от (1, 1) до (i, j) исходной матрицы. В sumDown[i][j] должно быть число — сколько столбцов без решеток содержится в подматрице от (i, 1) до (n, j) исходной матрицы. Осталось перебрать клетку, в которой произойдет первый поворот трубы (она шла сверху и повернула направо или налево), проверить что в столбце j над этой клеткой нет решеток, с помощью массивов lf и rg узнать насколько труба могла идти налево или направо и с помощью массивов sumUp и sumDown аккуратно пересчитать ответ.

Осталось вывести число ans1 + ans2 + ans3.

Асимптотика решения — O(n * m * const), где n — количество строк в заданной матрице, m — количество столбцов в заданной матрице, const принимает различные значения в зависимости от реализации, в решении из разбора const = 10.

Разбор задач Codeforces Round 293 (Div. 2)
  • Проголосовать: нравится
  • +73
  • Проголосовать: не нравится

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

On D, I thought of state f(n, t, p): expected number if n people are on elevator, t seconds have passed, and accumulated probability is p. Being p a floating point, how can I store such thing?

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

For problem E, my program kept failing the fifth testcase, which is this one:

5 1 1000000000 ? ? ? ?

The jury solution was: 1000000000 1000000001 1000000002 1000000003 1000000004, but my program gave an "Incorrect sequence", since none of the numbers were in range [-1e9, 1e9]. Apparently this restriction only applied to the given numbers? Please, be a bit more clear about this next time, I assumed the entire sequence was supposed to be in that range..

EDIT: Yep, changing all my 1e9's to 1e11 made it pass. A bit frustrating, to be honest.

EDIT: And yes, problem E, not D :)

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

Ребят, посмотрите, пожалуйста, мою C

Я понимаю, что это безумно медленный код, что он некрасивый совсем, но он должен работать вроде бы

Что не так?

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

    Случайность, что такая программа проходит хоть какой-либо тест.

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

      И еще int res

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

      упс.. и правда.. спасибо) засыпаю уже, впритык не видел ошибку)

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

        И это, вроде, тоже ошибка.

        Там нужно curPos, если я правильно понимаю Ваше решение.

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

          да, точно, после контеста сходил, попил чайку, прихожу и столько багов сразу в лицо

          начал бы я её писать минут на 5 раньше, может и сдал бы..

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

This submission's result is WA. 10007183

when I change from char s[200000],char t[200000] to s[200001], t[200001], 10007601 The result is accepted.

I don't know why my first submission is wrong.

Input string's max length is 200000 and my array's max length is 200000 too. When I test with max length's string, the result is 0 200000 or 200000 0. Please help me :)

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

    1 extra byte for the null character at the end

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

    To elaborate, scanf writes the entire scanned string plus a terminating null character. If the buffer isn't large enough to handle this (as in your WA), then it's undefined behavior.

    What happens in practice depends on how memory is laid out. I tested with a global char s[8], t[8] and two 8-char strings, and the C++ compilers put t directly before s in memory. t's null terminator was written to s[0], making s an empty string and giving you the 0 0 output. (The C compiler put s before t, effectively appending t to s.)

    Point being, when dealing with character buffers, make sure to account for the null terminator. Or use a safer method such as std::cin >> std::string.

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

      Thank u about your answer! from now on, I will use array with enough index :(

      But, I have another question about this.

      I read your answer and tested with a global char s[7], t[7] and two 7-char strings like you.

      I expected WA in test 3. because test 3 input's length is 7. (the test 3 input is abacaba / AbaCaBA) 10008773 But, test 3 is accepted in test 3, and WA in test 6(test 6 input's length is 26).

      Than, what happen?

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

        Insufficient array bounds causes buffer overflow and may cause undefined behavior depending on how the memory is allocated. strlen reads the string till it hits a null char '\0', which in case of of an overflow cannot be predicted. It can either find it just after the actual string or after reading a lot of garbage and might even give a segfault

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

        What happens in cases like these depends on the memory alignment of the buffers. It looks like GCC and MS C++ align char[] to 4 bytes in this environment, whereas g++ aligns to 1. So in test 3 the buffers are actually 8 bytes apart so there's room for the null terminator, but in test 26 one buffer overruns the other.

        See for yourself:

        printf("%p %p\n", &s, &t);
        
»
9 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

How would Anya and Smartphone be solved if everytime we launch an application, it's moved to the first page's first position?

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

    I see obvious solutions like segment tree or treap. Segment tree solution is not too hard so I think this will be the best solution. Can explain further if you wish.

    Edit: ok, I don't have any idea how to solve it with treap now. My bad.

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

    What I thought was maintain a supreme counter. Assign 1 to n to a[n-1], a[n-2] that is in reverse order. Now on opening an application query the no of elements larger than current value for that application, which shall give number of gestures and update the current value with supreme and increment supreme. My approach uses BIT so it is easier I think than Segment Trees and Treap. I would love to hear how to do this with treap.

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

    We can use a BST.

    We will maintain 2 data structures:

    1. A BST keyed with "score". The lower the app's score, the lower is its position. App at position 1 has the lowest score. In this BST we will also have to maintain the app id and size of the subtree rooted at this node.
    2. A vector of BST iterators mapping app id to BST nodes as defined above.

    Update operation (when Anya clicks on an app):

    1. Calculate cost. This will be a function of rank of the BST node in an inorder traversal. Easy to calculate using the sizes we have stored in #1. (When traversing right, add left_size+1, when traversing left, do nothing; Refer augmented RB trees in Cormen for details).
    2. Delete BST node using the iterator from #2 and re-insert it with 1 less than the current lowest score (to ensure 1st position).

    Does this work?

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

    Edit : I think what I said was wrong.

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

Awesome contest, thank you! ;)

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

it's third time I've got wrong answer because of "long long int"

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

Could we obtain the dp of problem D also with matrix exponentiation?

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

    Naive Matrix multiplication for (axb) x (bxc) id O(abc)

    For exponentiation of (nxn) matrix to power e is O(n3 log(e))

    at n = 2000, it will give TLE. For smaller values, it is solvable

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

      what would be the transition matrix?

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

        One way would be (n+1)x(n+1) Matrix, M[i][i] = (1-p) and M[i][i-1]=p M[i][j]=0 otherwise

        Your state vector would be B[i] the probability that there are at least i people on the elevator. (i=0..n)

        	Matrix M(n+1,n+1), B(n+1,1), Mx, Ex;
        	M[0][0] = 1.0;
        	B[0][0] = 1.0;
        	for(int i=1;i<n+1; ++i) {
        		M[i][i]   = 1-p;
        		M[i][i-1] =   p;
        	}
        	Mx  = M.pow(t);
        	Ex  = Mx*B;
        	for(int i=1; i<n+1; ++i) {
        		ans += Ex[i][0];
        	}
        
»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

For F, one can also use simple DP with "layers" (multiple passes). E.g. define states {STARTED, TURNED1_LEFT, TURNED1_RIGHT, TURNED1_MOVED, TURNED2, FINISHED} and pass through the whole field in all directions for each state (each state increases number of combinations on some later state).

Here's my submission (the code is messy copy-paste though I tried to reduce stuff with macros).

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

In Problem A:

It is said, "It is guaranteed that the lengths of strings s and t are the same and string s is lexicographically less than string t." ****

But in test #10

Input

vklldrxnfgyorgfpfezvhbouyzzzzz

vklldrxnfgyorgfpfezvhbouzaaadv

Can anyone explain it to me?

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

hey !! has anyone done the fourth problem taking state as dp[i][j] where i is the no of persons alloted till time j..i dont know what is the problem with my dp ..please help

http://codeforces.com/contest/518/submission/10008582

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

For D :

If(n>=t): Therewill be at least one person always trying to step in. So I should always multiply with (1-p) which gives an easy solution as sum of (tCi * p^i * (i-p)^(t-i) * i);

else : if n people finish then the probability should not be multiplied with 1-p and should be add directly. So let's say I repeat the above procedure for 1 to n-1. and for n I separately calculate the sum by iterating over all times from n to t and ending at that point of time to get the required answer as above. Can somebody find any mistake in this?

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

    My AC submission during the contest uses the same logic so I don't think there's any mistake in it . Though the dp solution mentioned in the editorial is much more simpler.

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

Hello. I am having difficulty solving Problem B. It appears to me that my solution is what's written in the editorial, but it was given the WA verdict during the contest.

Thanks for your help.

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

Hello. I am having trouble finding the bug in my code. It appears that my solution is what is written in the editorial, but it was given the WA verdict during the contest.

Thanks for your time.

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

    Your solution (and the editorial, as currently written) allows characters in s to be double matched. If you match in the first pass, set s[i] to a non-letter so you can't match it in the second.

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

In problem A:

It is mentioned,** "It is guaranteed that the lengths of strings s and t are the same and string s is lexicographically less than string t."**

Test case #10:

Input

vklldrxnfgyorgfpfezvhbouyzzzzz

vklldrxnfgyorgfpfezvhbouzaaadv

Can anyone explain i8t to me?

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

    Actually, s<t, because the 25-th character in s is equal 'y', and the 25-th character in t is equal 'z'.

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

Concerning problem F: Could someone explain what values are stored in sumv and sumg? I didn't understand what grid is supposed to mean in this context.

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

the feeling of wa because of long long can only be understood by me !!! CM :(

agli-baar-long-long in every question

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

What is the logic to solve problem E , i am not able to understand the editorial for it

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

Can someone explain problem D please. Especially how is the probabilities are calculated?

thanks edi

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

    Let P(n, t) be the probability of having n people on the escalator after t seconds.

    • P(0, 0) = 1
    • P(0, k) = (1 — p)^k, if k > 0
    • P(k, 0) = 0
    • P(n, t) = P(n — 1, t — 1)*p + P(n, t — 1)*(1 — p), if n is not the total number of people
    • P(n, t) = P(n — 1, t — 1)*p + P(n, t — 1), otherwise
    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      But did you try solving like this? It does not work

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

        Of course it works. It's the same idea of the solution posted above, just in a different notation. Here is my accepted code: http://codeforces.com/contest/518/submission/9999105

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

          But you are using cache[n][t] += prob(n, t — 1)*(1 — p); why are you doing a sum ?

          P(n, t) = P(n — 1, t — 1)*p + P(n, t — 1)*(1 — p), if n is not the total number of people P(n, t) = P(n — 1, t — 1)*p + P(n, t — 1), otherwise

          No sum here.. Confused a bit

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

            Look closer. There's a sum there. I'm adding up the second term separately.

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

              Oh.

              and this works. So awesome thanks a lot. I ll recheck my solution

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

Hi,

For problem B. I am having trouble with pretest 3. for following input abacaba AbaCaBA My solution run and shows as "6 1" against expected "3 4". But when I am running the same in local against the same input its correctly running as "3 4". Can someone see what exactly is issue or if they can reproduce this issue on there machines as well with my code.

http://codeforces.com/contest/518/submission/10016414

Any help would be appreciated

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

    Because the the server is doing this for(int i = 0 ; i<100; i++) a[i] = 0; when you declare int a[100]. that is initializing each array value to 0 So if you add that line after cin>>t; for(int i = 0 ; i<100; i++) a[i] = 0;

    you will get the same error

    Side note: Also you are doing a[s[i]-'a']++; what if s[i] == 'A' ? then s[i]-'a' = -32. which is a negative number. you should be careful with this.

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

Hello

For problem D "517D — Ilya and Escalator", I am not able to understand why we have to do following:

"Now we need to count answer — it is sum on j from 0 to n inclusive z[t][j] * j."

Why multiplication with j is required?

Thanks

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

what is wrong with my solution for problem B Code

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

    Your code checks all element of w twice, so it is possible that some elements are selected in the both first loop and second loop. You have to check the elements of w which are not selected in the first loop, i think. Try this case: aa aaAA

    The correct output should be 2 0. But your code output 2 2.

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
  • c(n, k) = c(n, k — 1)*(n — k + 1)/k k > 0
  • c(n, k) = c(n — 1, k)*n/(n — k) n > 0 k < n

Then it seemed that there is O(t) time and O(1) space algorithm for problem D. Accepted sample code: http://codeforces.com/contest/518/submission/10018612 although this simple implementation can be hacked with data like "2000 0.999999 1999" because there is no "minimum positive value" of 1 — p or p.

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

I got wrong answer for "517C — Anya and Smartphone" because I used int instead of long. http://codeforces.com/contest/518/submission/10002898

How could I have recognize that I would need long, instead of int ?

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

    Suppose n = m = 10^5, k = 1 and every time you want to open the last app. Each launch will take 10^5 gestures, so the answer will be 10^10 which does not fit in a 32-bit integer. You have to predict the worst case of your algorithm.

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

    You must think a bit. Whenever you are summing potentially big numbers, you must use long long int.

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

What would be the answer for problem F for this input:

and why?

3 4

..#.

....

.#.#

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

Здравствуйте, помогите пожалуйста, не могу разобраться, где ошибка (517B) Решение

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

Can somebody explain me whats wrong with this solution for problem B: http://codeforces.com/contest/518/submission/10033494

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

Можно спросить про задачу F. Всё понятно кроме случая, когда мы ищем сколько труб есть с двумя изгибами. Например rg для i,j — это ближайшая справа решётка в той же строке, что и i? И как именно дальше происходит подсчёт ответа... Как вот далььше мы должны считать? Пусть для столбца j мы узнали, что можем пойти направо на 3 деления и налево на 4 деления. И вот сколько есть способов это и будет ответом?

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

I keep getting Run Time error for my code: 10099873 to Problem E. It is running normally for local tests. Can anyone point out what is going wrong?

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

For problem D, test case — 6 — I got wrong and the log reads - wrong answer 1st numbers differ — expected: '414.0744421', found: '414.0740000', error = '0.0000011'

My algo is exactly the same as given. I coded in C++ and double instead of float for all non-integers. How to get over this problem?

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

    Use printf or set up your cout

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

      I'll try with printf but, How can I setup my own cout?

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

        I think std::cout.precision(8) or overriding std::iostream::operator << may work, but overriding operators is a bit complicated. Therefore try the former method :)

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

Problem C
I write codes such like for (int i = 0; i < (int)strlen(A); i++) {} and get a 'TLE'
but use int lenA = strlen(A); for (int i = 0; i < len; i++) {} get a 'AC', why?
10538344 TLE
10538342 AC