Нахождение паросочетания можно ускорить до O(n^3) если использовать формулу Шермана-Моррисона (http://en.wikipedia.org/wiki/Sherman%E2 … on_formula)

2

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

У этой задачи есть решение за O(V^2+E)

3

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

Не стоит пока ее обсуждать, см. http://www.e-olimp.com/competitions/136 (задача O)

4

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

Это как раз и получится векторное произведение)

5

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

Если сортировать по arctan(x/y), легко получить проблемы с точностью, т.к. arctan - очень неточная штука, особенно при y->0. acrtan2(y, x) чуть лучше, но на многих задачах все равно не поможет. Гораздо лучше сортировать компаратором на основе векторного произведения. Для начала надо проверить, что вектора a и b находятся в одной полуплоскости. Если это не так, то их легко между собой сравнить. Иначе же считают что a < b если [a x b] > 0. Такой компаратор сравнивает вектора в целых числах и принципиально не может иметь проблем с точностью

6

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

В java есть реализованный алгоритм Евклида для BigInteger - метод gcd. Он в данном случае будет намного эффективнее обычного, т.к. там реализован двоичный алгоритм Евклида, работающий быстрее обычного в размерность чисел раз быстрее

7

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

Можно за O(n^2*log(n)), если в ней n ненулевых элементов, с помощью веселого дерева отрезков

8

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

Статья: http://alexandria.tue.nl/repository/fre … 597563.pdf

Собственно алгоритм:
1) ориентируем граф так, чтобы у каждой грани было нечетное число ребер, ориентированных по часовой стрелке
2) берем знаковую матрицу смежности (она будет антисимметричной)
3) считаем пфаффиан (корень из определителя, http://en.wikipedia.org/wiki/Pfaffian) этой матрицы. Он и будет количеством паросочетаний

9

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

Вообще, есть общий полиномиальный алгоритм для подсчета количества паросочетаний в планарном графе, правда к этой зададаче он не подходит (сложность порядка O(n^3)*(сложность длинного умножения n-битных чисел), где n - количество вершин в графе)

10

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

Там не про O(M*N*M^2), а про O(M*N*2^M)
Тем не менее, количество замощений доминошками прямоугольника все же можно считать за полиномиальное время)

11

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

Спасибо)

12

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

Решение вроде правильное. Видимо баг в реализации

13

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

http://acm.timus.ru/problem.aspx?space=1&num=1144

Я пытаюсь решить эту задачу уже долгое время, но так и не смог преодолеть 2 тест(

14

(10 ответов, оставленных в Offtopic)

  • Gentoo Linux

  • Eclipse, Emacs

  • JDK, GHC

15

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

orfest пишет:

Можно использовать любое железо, даже кластеры

Ну, на онсайте кластером особо не попользуешься big_smile

16

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

Точно, невнимательно прочитал(

17

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

см. http://e-maxx.ru/forum/viewtopic.php?id=38

18

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

А на саму задачу ссылку можно?

19

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

Да, я хотел сказать по автомату)))
Как решать массивом не очень понятно

20

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

Динамикой по суффиксному дереву или суффиксному массиву.

21

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

n^2 log n при n = 5000 выглядит малореалистично

22

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

Прямоугольный и правильный треугольники - несколько разные понятия)

23

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

Эту задачу можно решать специальным деревом отрезков за O(n*log n) памяти и препроцессинга и O(log^3 n) на запрос.
Идея такая: в вершине дерева будем хранить соответствующий отрезок отсортированным. Тогда на каждый запрос надо найти разбиение запрашиваемого отрезка на не более O(log n) отрезков из дерева и найти ответ на запрос бинарным поиском (количество элементов менбших данного в отсортированном списке ищется еще одним бинарным поиском)

24

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

Если точки целочисленны, можно их искать в хеш-таблице за O(1)