Всем привет!
Завтра, в 20.00 MSK состоится Topcoder SRM 626.
Предлагаю после контеста обсудить здесь задачи.
GL & HF
UPD: Контест закончился. Обсуждаем задачи.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Всем привет!
Завтра, в 20.00 MSK состоится Topcoder SRM 626.
Предлагаю после контеста обсудить здесь задачи.
GL & HF
UPD: Контест закончился. Обсуждаем задачи.
Название |
---|
Thanks, seems like I'm going for my first SRM ever :)
Good luck)
It conflicts with Codingame challenge
Also with first 1/8 fifa game [Brazil — Chile] Sad. hadn't decide which one I will choose.
HELP! Не могу зайти на свой аккаунт с арены Ubuntu. С другого ноута заходит, но с моего ноута нельзя зайти ни в какой аккаунт :(
Ошибка: Invalid combination of username and password.
У Anuar было так же.
Can someone explain why in 500 we get a huge negative score in example 1 using a self loop from a final vertex (vertex 1), but in example 3 we are not allowed to go back and forth between vertices 1 and 2 to get a huge negative score?
Thanks!
The graph is directed.
Как решать Div1 250?
Считаем, какая вероятность получить ровно i для каждого игрока (например, динамикой), пусть это pi для первого и qi для второго. Тогда ответ — по определению матожидания. И надо не забыть про случай с "-1".
А в нем надо не забыть a × b ≤ c, вместо < .
Как доказать что точность будет подходить ? чисто теоретический интерес.
Я знаю следующие возможные проблемы с даблами:
1) Где-нибудь теряется много точности из-за вычитания чисел примерно одного порядка.
2) Где-нибудь возникает число по модулю больше 10^308, и получается бесконечность.
3) Где-нибудь возникает число по модулю меньше 10^-308, и что-нибудь важное обращается в ноль.
4) Где-нибудь происходит много операций с денормализованными числами (около 10^-308), и все работает в 50 раз медленнее.
Здесь 3) могло бы произойти со знаменателем, но не произойдет, потому что вероятность каждого элементарного исхода не меньше 50^-100. Соответственно, с 4) тоже все в порядке. 1) и 2), очевидно, в порядке.
http://ru.wikipedia.org/wiki/Условная_вероятность
Как решать div2-1000?
How was Div2 1000 problem to be solved?
В 1000 к сожалению последовательность гуглится на oeis.org. Да, авторы добавили a и b, чтобы было сложнее гуглить, и да, можно решать включением-исключением без гугла. Но всё же...
Какая?
Ответ(bounces) при a = b = 1 (естественное предположение, учитывая что a^2 + b^2 влияет на ответ мультипликативно): http://oeis.org/search?q=10+26+84+140+196+406+680&language=english&go=Search
Ну надо еще догадаться через пробел искать, а не через запятую :D
Не очень понял, чем помогает OEIS. То, что нужно посчитать сумму квадратов взаимно простых, вроде и так ясно?
Да, но как её посчитать? Это не совсем очевидно. На OEIS есть формула, можно ещё включением-исключением считать. Или есть какой-то простой очевидный способ, который я упускаю?
А, не заметил формулу, теперь понял. Включением-исключением, да.
Не говоря уже о том, что практически та же самая задача есть на ProjectEuler: http://projecteuler.net/problem=202
lol, я вообще не решил ни одну из задач, но мой рейтинг поднялся))
А мне одного балла не хватило до зеленого(
My fail on 900 this time was quite unusual: the whole problem can be siplified to counting sum of squares of integers coprime to and (the answer's that times a2 + b2), but for some mysterious reason, I decided to count the sum of squares of non-divisors. Not to mention I didn't notice that and though that I'm only failing on the last sample due to some hidden overflow, because what else could cause me to pass the other large sample? (Of course, it's the fact that is a power of 2 in all samples except the last one and the one where the answer's trivially 0.) Boop.
In the end, this reduction's easily solvable by Google Search Algorithm...
Кто нибудь может доказать что Форд-Беллман с дополнительным параметром является неправильным решением к div2 1000?
А на TopCoder можно дорешивать? И если да, то куда нужно заходить? я что-то не пойму :(
в practice room можно отсылать на проверку
For problem 250 div 2 I have solved it with a really fast algorithm but it's status is "challenge succeeded" . I don't know what it means ?
Your solution may have passed the given test cases, but it was not correct.
The person who hacked(challenged) your solution found a test case, where your algo gave the wrong output
600 див1 как решать?
Я так решал: Посчитаем сначала кратчайшие расстояние между всеми парами вершин, без использования отрицательных ребер. Допустим это G[u][v].
Теперь будем считать кратчайшие пути с использование не более 2i отрицательных ребер. F[i][u][v] — длина кратчайшего пути из u в v используя не более 2i отрицательных ребер.
Для 20 — посчитаем влоб: для всех пар u и v выберем минимум по всем ребрам (fromi, toi, wi) выражения G[u][fromi] - wi + G[toi][v]. Пусть это будет F[0][u][v].
Для остальный 2i при i > 0 будем считать так:
F[i][u][v] = min(F[i - 1][u][v], minw(F[i - 1][u][w] + F[i - 1][w][v]).
Т.е. переберем некоторую промежуточную вершину w и воспользуемся 2i - 1 отрицательными ребрами на пути от u к w и на пути от w к v.
Теперь чтобы посчитать ответ с заданным ограничением — разобьем наш лимит на количество отрицательных ребер по степеням двойки и соберем ответ. Пусть наш лимит . Я решал это динамикой по типу Форда-Беллмана -- dp[i][u] — минимальная стоимость пути от исходной вершины, причем мы шагнули через первые i степени двойки из need.
dp[0][0] = 0.
dp[i][v] = minu(dp[i - 1][u] + F[needi - 1][u][v]).
Ответ
min(dp[|need|][n - 1], G[0][n - 1])
.Ассимпотика получается примерно такой: O(V2·E + V3·log(charges)).
Видимо, это решение можно вкратце описать следующим образом: заметим, что одна итерация Форда-Беллмана действует на массив расстояний как умножение на матрицу с операциями (min, +), поэтому массив расстояний для положительных ребер надо умножить на соответствующую матрицу с отрицательными ребрами в нужной степени. Очень крутая идея, ни разу раньше не встречал. И жаль, что не придумалось за контест.
UPD: просто Форд-Беллман на исходном графе в данном случае не сработает, потому что положительные и отрицательные ребра могут чередоваться. В матрице aij надо сделать равным длине минимального пути из i в j, содержащего не более одного отрицательного ребра.
У меня другое решение. Работает за O(n5), это полторы секунды на случайном тесте максимального размера. Возможно, можно подумать и сократить время работы хотя бы до O(n4).
Посчитаем динамикой f(k, u, v): минимальное расстояние от вершины u до вершины v при инвертировании не более чем k рёбер по пути. Пригодится таблица примерно до k ≤ n2 + n. У меня это делается за O(n5).
Интуитивно понятно, что для очень больших значений charges выгодно потратить почти все заряды в наиболее «удельно выгодном» для этого цикле данного графа — то есть найти такую вершину u на цикле и такое k > 0, что отношение f(k, u, u) / k максимально. Возможно, нужно будет ещё потратить немного зарядов по дороге от начальной вершины до этого цикла, а также по дороге от этого цикла до конечной вершины. Естественно, пути от начала до u и от u до конца должны существовать.
Утверждение (без доказательства): оптимальный путь состоит из предпериода длины r ≤ n2, периода длины d ≤ n, повторённого целое число раз s, и постпериода длины t ≤ n2. То есть ответ — это минимум f(r, 1, u) + f(d, u, u)·s + f(t, u, n), где r + d·s + t = charges.
Переберём длину предпериода и длину периода. Длину постпериода будем подбирать как можно ближе к n2 + ε, чтобы не перебирать. Если она получится слишком большая, в ней окажется ещё несколько копий периода. У меня это делается за O(n4).
Пример теста (взлом), в котором предпериод и постпериод не могут одновременно быть порядка n: ориентированный цикл из n вершин, в котором можно в одном месте сократить путь на одну вершину. Если, например, n = 50, цикл перебирает вершины по порядку и нужно сделать ровно 2425 шагов от вершины 1 до вершины n, то у диофантова уравнения x·50 + y·49 + 49 = 2425 есть единственное решение с ограничениями x ≥ 0 и y ≥ 0: это x = 24 и y = 24. То есть нужно 24 раза пройти по одному пути и 24 раза по другому в любом порядке.
How was Div1 600 problem solved?
dp[a][b][c] — answer for way from a to b with c charges.
if c==0 then answer is shortest path (floyd helps)
if c is even then for some vertex i answer is dp[a][i][c/2]+dp[i][b][c/2]. for all such i we take best.
if c is odd then instead of vertex we choose edge (i,j) and answer is dp[a][i][c/2] + dp[j][b][c/2] — weight(i,j).
c charges will be between 0 and 1,000,000,000, inclusive so how can it be the third dimension ??
look carefully: charges always divided by 2, so total number of states is O(n2log(Charges))
Got it.Thnxz.
I can't get the point of (even & odd) how & why it work ?
thanks
Think about the shortest path from u to v with c charges (c is even). Since you do charges one by one, there will unequivocably be a middle node m such that you do c / 2 charges from u to m and c / 2 charges from m to v. That's why the DP works.