51

(8 ответов, оставленных в Algo)

А лучше кучу сам пиши smile В этом будут только плюсы.

52

(1 ответов, оставленных в Problems)

В общем задача такая:
Есть дерево,в вершинах есть уровень радиации,который может меняться на протяжении работы программы.Но один раз мы можем использовать защиту,то есть в одной из вершин можно надеть костюм и не облучиться.Поступаю запросы на суммарный  уровень радиации по пути/изменение уровня радиации в какой-то вершине.
Я планирую написать на неё дерево отрезков для макса+дерево отрезков для суммы(или фенвика).Тогда очевидно что ответ для запроса (u,v) будет ans=sum(u,v)-max(u,v).Осталось научиться определять отрезок (u`,v`),где и искать макс/сум. Собственно в этом я и прошу вас помочь smile

53

(8 ответов, оставленных в Algo)

Почему отрицательные это я знаю.Но ведь h[j]-h[i-1] может быть меньше 0.А вот h(s1)*p^I, где s1-искомая строка-всегда больше 0.

54

(8 ответов, оставленных в Algo)

epic fail...
Возникла проблема в реализации.. sad .Когда вычисляю h(i..j) это значение иногда бывает отрицательное(понятно по какой причине).Перечитывал статью,но ошибку в самом алгоритме не нашёл.Но в коде,несмотря на то, что я ничего не понимаю в с++, меня насторожила запись в коде: "{
    h(i) = (t(i) - 'a' + 1) * p_pow(i);
    if (i)  h(i) += h(i-1);
}
"
что означает if (i)?и как избежать искажений из-за вычислений по модулю?

55

(8 ответов, оставленных в Algo)

Ну да, двухуровневый хэш при поиске подстроки лишь немного увеличит константу,но на словарных задачах его довольно сложно реализовать используя О(n) памяти.Зато ответ на запрос за О(1).
Кстати кто-нибудь реализовывал его используя О(n) памяти?

56

(8 ответов, оставленных в Algo)

Хммм..
Например при поиске вхождений строки s1 в s мы найдём хэш-функции от всех префиксов строки s и от самой  s1.А потом при поиске проверяем чтобы  h(s1)*P^(i-1)=h(j)-h(i).
Так ведь?

57

(8 ответов, оставленных в Algo)

http://e-maxx.ru/algo/string_hashes
У меня есть пара вопросов по этой статье:
1.Почему данная хэш-функция  не вызывает коллизий?
2.Не совсем понятно как найти хэш-функцию от подстроки.Может это для кого-то и очевидно,но у меня возникли проблемы с пониманием этого этапа.
Буду благодарен за любую помощь. smile

58

(11 ответов, оставленных в Algo)

Я как паскальщик на код даже не смотрю=)Может это и к лучшему..:)

59

(6 ответов, оставленных в Feedback)

Да, конечно!Особенно было бы интересно если лекции подкреплялись соответствующими задачами на те же темы wink

60

(3 ответов, оставленных в Problems)

оО
Хорошая идея=)
Я думаю что это правильно из-за того,что вершины которые а МОДе будут соединены будут "соседями" либо по х,либо по у,либо z.Даже если в одной из сортировок мы выбрали не "правильное" ребро между вершинами u и v ,то одна из вершин которая будет лежать на отрезке num1 и num2(номерами u и v)  в других сортировках станет промежуточной в МОДе между u и v(но никакая другая!!!(только между нум1 и нум2!!!)).
Это правильно? roll

61

(12 ответов, оставленных в Feedback)

Кстати,я зарегистрировался на топкодер,но потом с ужасом узнал,что там на С писать нужно
:-/

62

(2 ответов, оставленных в Problems)

По-моему тебе нужно это.
http://e-maxx.ru/algo/vertex_weighted_matching
но ,возможно,я ошибаюсь)

63

(12 ответов, оставленных в Feedback)

Спасибо!На кодфорсес я уже участвую,неплохой сайт wink .
А на топкодере нужен очень высокий уровень знаний?

64

(12 ответов, оставленных в Feedback)

Если кто знает сайты,где регулярно проводятся онлайн-контесты,то напишите их адреса ,если не сложно wink

65

(5 ответов, оставленных в Problems)

омг...
Сказано было что для неориентированного дерева сложнее чем для орграфа.
Я не говорил что могут быть циклы и т.п.
Существует решение за О(n) и для такого графа.Но для него реализация сложнее(что я и сказал)

66

(5 ответов, оставленных в Problems)

В орграфе намного проще.
А в неориентрированом сложнее.... yikes

67

(12 ответов, оставленных в Problems)

Только-что тестировал задачу.В которой не использовал вторую эвристику,и она проиграла по времени задаче с эвристикой в среднем 30%-50%!!!!Но всёравно не понятно почему...В Кормене как-то всё не размыто^^

68

(12 ответов, оставленных в Problems)

Я снова в заблуждении yikes
Вот 2 моих варианта ЮНИОНа:
1:
  a:=findset(x);
  b:=findset(y);
  dsu[a]:=b;
2:
  a:=findset(x);
  b:=findset(y);
  if random(2)=1 then swap(a,b);
  dsu[a]:=b;

Я не понимаю в чём первый вариант проигрывает второму?(оО)

69

(12 ответов, оставленных в Problems)

Согласен cool
Мне кажется, что при двухпроходном файндсэте нужда в какой-либо эвристике в юнионе уже пропадает, так ведь?

70

(12 ответов, оставленных в Problems)

В чём эвристики в процедуре Юнион в ДСУ?Я пробовал сдавать задачи ,например для МОД,не используя данной эвристики,и результат не менялся.
Хотелось бы чтобы кто-то кто знает рассказал и мне cool

71

(3 ответов, оставленных в Problems)

Возможно,но я учитывал реализацию связным списком рёбер,то есть ребро (u,v) будет рассмотрено как (u,v) так и (v,u)  cool

72

(2 ответов, оставленных в Problems)

Я не очень силён в строках,но для таких ограничений можно взять массив логического типа где b(i)=true,если символ s(i)-выделен.И по окончанию поиска подстроки считаем количество b(i)=true для всех i(1..length(s)).Ну а сам поиск лучше реализовать через КМП.

73

(3 ответов, оставленных в Problems)

Я бы пустил обход в глубину и нашёл бы  рассояние от 1 до всех остальных вершин.Потом рассматриваем каждую вершину и её ребра.При рассмотрении ребра u-v к внутреннему счётчику count(u) добавляем (t-dist[v]+1),то есть количество импульсов,которые пустит вершина v в вершину u с момента её включения.

74

(3 ответов, оставленных в Algo)

Вот ссылка на раздел где есть теория и сами задачи на структуры данных и на дерево отрезков в том числе- http://informatics.mccme.ru/moodle/cour … .php?id=18

75

(9 ответов, оставленных в Problems)

При более низких познаниях в геометрии можно провести перпендикуляр относительно луча через его начало,и смотреть чтобы точка лежала как на прямой,так и по одну сторону от перпендикуляра.А именно если A,B,C-коэффициенты перпендикуляра,  side1=Ax2+By2+C,a side2=Axp+Byp+c,то side1*side2>0,тоесть знак у side1 и side2 одинаковый.