251

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

Мне кажется, что гораздо проще будет оставить рекурсивный вариант. Просто x и y возвращать не с помощью переменных по ссылке, а как результат функции.

Т.е. сделать класс gcd_return, содержащий три поля: g, x, y - соответственно наименьший общий делитель, и x и y. И возвращать его.

вероятно, у вас граф неориентированный, а должен быть ориентированным.

253

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

Конечно smile

char * str = new char[1000]; // выделение памяти под 999 символов, например
gets (str); // чтение строки
s.insert (str); // добавление в set

Но кроме этого, нужно научить set работать со строками: пока он воспринимает их только как указатели (т.е. будет сравнивать их по адресу в памяти). Нам же надо сранивать их посимвольно, поэтому делаем новый компаратор для сета:

struct cmp {
   bool operator() (char *a, char *b) {
      return strcmp (a, b) < 0;
   }
};

set < char*, cmp > s;

По-хорошему, память, выделенную по new, надо в конце освобождать по delete, но в олимпиадных задачах на это можно забить.

254

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

Нельзя делать set из массивов. Вообще стандартные STL-ные контейнеры не умеют работать с массивами. Так что или делать свою структурку для строк, или работать с указателями на строчки char*, или использовать STL-ную string.

255

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

из стандартных средств - вроде gets самый быстрый.

256

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

Мне кажется, проблема в том, что одномерного состояния недостаточно. Хотя бы потому,что одна и та же команда могла входить в ответ несколько раз.

257

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

Наконец удалось полностью установить и настроить вики smile

Стоит Media Wiki 1.15.1.

С этого момента e-maxx.ru присоединился к движению за общедоступную и редактируемую всеми информацию! smile

258

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

Всем привет.

В связи с тем, что у меня вдруг неожиданно стало мало свободного времени, я больше не могу много заниматься своим сайтом. Это можно заметить по новостям: последнее обновление было полгода назад smile

До текущего момента сайт был достаточно закрытым: писать и редактировать статьи мог только я. Но сейчас это только сдерживает развитие сайта: при открытой системе редактирования, как в википедии, я уверен, найдётся достаточно много желающих продолжать развивать сайт. Даже банальное исправление ошибок станет гораздо проще.

Поэтому на сайте намечаются реформы smile В ближайшие несколько дней я установлю Wiki, на панели слева сделаю ссылку на неё. В первую очередь планируется перенести в вики все алгоритмы, также можно сделать разделы, посвященные разбору задач по конкретным алгоритмам, и разборы задач с проблемсетов. Старый раздел "algo" будет заморожен, и для совместимости ещё будет работать некоторое время.

259

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

Например, статья Кохася "Разбиение ацтекских диамантов и квадратов на домино". У нас правда не квадрат, но всё равно по-моему вся информация есть в этой или подобных статьях. Кстати, в ней приводится и некая формула Кастелейна, которая как раз основана на косинусах и синусах.

260

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

KADR
гугли по "ацтекскому диаманту"...

261

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

Спасибо smile Это вообще ппц, анрил, невероятное везение big_smile

262

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

Да, нелогично smile Но зато быстро работает (гораздо быстрей потоков), а это ведь главное wink

263

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

Надо создать проект "Console Application", поставив флажок "Empty", и потом добавить в него ("Source files") свой <name>.cpp.

264

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

Хмм, а ведь и правда фигня какая-то получается smile Всё дело в том, что условие "curlen + len + dist[to] <= maxlen" не гарантирует нам, что мы действительно найдём хотя бы один подходящий путь, если пойдём в to. Потому что вершины в пути не могут повторяться, а заранее выполненная Дейкстра ничего об этом не знала. Пример Olegа это демонстрирует.

Понятно, как исправить это с ухудшением асимптотики: на каждом уровне рекурсии после строки "used[v] = true;" выполнять Дейкстру из t во все вершины, но при этом все поюзанные вершины запретить; соответственно, в цикле по to ниже использовать эти только что вычисленные расстояния. Тем самым мы сможем гарантировать, что после захода в вершину to хотя бы один путь в t найдётся, и тогда алгоритм будет работать полиномиально. Но при этом, понятно, вся асимптотика умножится на время выполнения Дейкстры, что не очень хорошо.

В любом случае, в статье и правда серьёзная идейная ошибка, спасибо Olegу. Можно ещё попробовать подумать, как решить эту задачу без такого ухудшения асимптотики, а потом тогда я исправлю и статью.

P.S. Интересно, как тогда у меня этот код прошёл по задаче (где n<=100) в одном из problemsetов... smile

265

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

А оптимизацию с жадностью пробовал? По некоторым экспериментальным данным, с ней Кун даже быстрее Хопкрофта-Карпа

266

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

да лан вам, это мой бывший сокомандник smile эх, золотые были времена в команде саратов су12... big_smile

267

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

O_o никто ниче не удалял, http://e-maxx.ru/forum/viewtopic.php?id=75 wink
так что сам деб tongue

268

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

Решал и я ту задачу... Честно признаюсь, ни тогда, ни сейчас я не понимаю, что такое выпуклая фигура в 4-мерном пр-ве, у которой все вершины соединены со всеми ))) Насколько я знаю, все её решали одинаково: random + проверка, подходит нам этот многогранник или нет.

269

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

Кстати, насколько я знаю, четвертьфинал проводится на другом контестере, написанном много лет назад и с тех пор практически не менявшемся (автор - Комков П.П.). Все остальные сайты *.sgu.ru/* работают на другом контестере, который живёт своей жизнью (первоначальный автор - Мирзаянов М.Р., а дальше уже, кроме него, вкладывали свои силы многие люди, проходившие через ЦОП).

270

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

Всё-таки это поведение (ML => RE) не совсем адекватно. Более правильно, когда виртуальной машине всё-таки выделяют достаточно много памяти, а вот на всю виртуальную машину навешивают ограничение по памяти. Ограничение должно быть повешено таким образом, чтобы программе таки давали выделить память, но тут же останавливали её с TL; если же просто не дать ей выделить, то произойдёт RE.

Лично я не участвую в разработке и модернизации контестера, но ясно одно: вместо первого, правильного, варианта (который и был раньше) каким-то образом получился второй. Ну и кроме того, почему-то неправильно выставлен нулевой уровень памяти (понятно, что та память, которая всегда занимается самой виртуальной машиной, не должна входить в учёт для ML). Ок, я сообщу об этих проблемах тем людям, которые этим занимаются.

271

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

O_o оч странно, я бы наверно отметил этот пункт, имея в виду треугольник Паскаля smile по той логике, что из известных алгоритма с таким названием нет, а значит других вариантов, кроме треугольника, не видно ))

272

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

А мне почему-то тоже кажется, что имеется в виду треугольник Паскаля.

273

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

Насчёт точности результатов это хороший вопрос smile Кажется, у Кнута есть глава, посвящённая этому, но я не осилил smile Ну делай в double, и, я думаю, можно верить, что погрешностей не будет.

По поводу скорости: от векторов пробовал отказаться?

274

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

Victor Barionov
спасибо, fixed

275

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

Спасибо за идею, попробую сделать в ближайшее время.