В рамках проекта SnarkNews стартовала зимняя серия индивидуальных соревнований по программированию SnarkNews Winter Series - 2011. Серия состоит из 5 раундов. При этом каждый раунд проходит по правилам TCM/SE. Участвовать в серии могут те, кто или уже зарегистрирован на сервере личных соревнований SnarkNews (список зарегистрированных доступен по ссылке "Пользователи" в верхнем меню), или подал заявку на участие в SNWS-2011 согласно правилам серии по адресу sn_register(собака)snarknews(точка)info.
Участвовать в SNWS-2011 можно, начиная с любого раунда.
Завершился первый раунд SnarkNews winter series-2011. Первое место занял Геннадий Короткевич (Беларусь, Гомель), второе - Пётр Митричев (Россия, Москва), третье - Дмитрий Джулгаков (Украина, НТУ "Харьковский ПИ").
При составлении первого тура были использованы задачи локальных контестов североамериканских университетов.
Прошу до конца раунда не обсуждать задачи в комментариях.
Участвовать в SNWS-2011 можно, начиная с любого раунда.
SN contests
Name | Type | Registration deadline | Start | Finish | |
---|---|---|---|---|---|
SNWS-11,R1 | TCM/SE (1,1,4) | - | 01.01.2011 20:00 | 10.01.2011 14:30 | |
SNWS-11,R2 | TCM/SE (1,1,4) | - | 06.01.2011 14:00 | 12.01.2011 14:00 | |
SNWS-11,R3 | TCM/SE (1,1,4) | - | 12.01.2011 14:00 | 18.01.2011 14:00 | |
SNWS-11,R4 | TCM/SE (1,1,4) | - | 18.01.2011 14:00 | 24.01.2011 14:00 | |
SNWS-11,R5 | TCM/SE (1,1,4) | - | 24.01.2011 14:00 | 31.01.2011 18:00 |
Завершился первый раунд SnarkNews winter series-2011. Первое место занял Геннадий Короткевич (Беларусь, Гомель), второе - Пётр Митричев (Россия, Москва), третье - Дмитрий Джулгаков (Украина, НТУ "Харьковский ПИ").
При составлении первого тура были использованы задачи локальных контестов североамериканских университетов.
Прошу до конца раунда не обсуждать задачи в комментариях.
Я понял так:
сумма S невыгодная если существует сумма S1>S, но S*cкидка/100>=S1*скидка/100
1
5 0.09
?
Не попал по кнопке :)
Там пустое множество.
На этот вопрос жюри отказалось отвечать :)
Там просто надо угадать, как автор задачи понял условие и написать такое же решение.
Как мне сказали те, кто сдал эту задачу, там не надо учитывать те невыгодные суммы, которые становятся невыгодными из-за сумм, при которых применяется такая же скидка.
Пожалуйста, можно без четырёхбуквенных сокращений?
Очень неприятно такое читать..
Там на сайте написано:
Участвовать в серии могут те, кто или уже зарегистрирован на сервере личных соревнований SnarkNews (список зарегистрированных доступен по ссылке "Пользователи" в верхнем меню), или подал заявку на участие в SNWS-2011 согласно правилам серии по адресу sn_register(собака)snarknews(точка)info.
Достатачно проверять только некоторые точки лежащие в прямоугольнике, я проверял все (a * x + b, c * y + d) где x, y это все возможные пары координат из (x1, x2, y1, y2) , |a|, |b|, |c|, |d| < = 1.
не то чтобы совсем, но g считал по-другому)
g = gcd(ai - bj) = gcd(a[i] - a[0], b[i] - a[0]) - что считается за O(N + M) вызовов gcd)
По задаче Е я придумал следующиее док-во.
Выберем две вершины А и B. Зафиксируем некоторую вершину С, ближайший к ней город с ярморкой обозначим К. Пусть w(A <-> K) <= w(K <-> B), если это не так, то можно просто "переназвать вершины".
Утверждается, что существует такая вершина С, что w(A <-> K) < w(C <-> K), если путь A <-> B не является диаметром дерева. Действительно, если A <-> B не является диаметром дерева, то найдется такая вершина A' или B', что w(A' <-> B) > w(A <-> B) или w(A <-> B') > w(A <-> B) (обозначу это суждение *). Таким образом можно находить более весомый путь и повторять эти действия пока не достигнем максимума. Если же A <-> B диаметр дерева, то такой вершины С не существует, если бы она существовала, то можно было бы найти путь большего веса, чем А <-> B, а это противоречит определению диаметра графа.
Вероность суждения (*) вытекает из корректности алгоритма поиска диаметра дерева.
1) 1й поиск в глубину/ширину этого алгоритма служит для того, чтобы перейти в вершину являющуюся листом дерева. (можно превести аналогию с тем, что, если А и B -- не листья дерева, то всегда можно найти точку С, что K = A и очевидно, что после замены А на C w(A <-> B) увеличится.)
2) 2й поиск в глубину предполагает, что мы его будем запускать из листа дерева и он найдет вершину, которая будет одним из концов радиуса дерева и к тому же будет самой удаленной от вершины из которой запускаем поиск. (Как это доказать я не знаю, просто поверим в это, ибо алгоритм работает). Соответственно если одна из вершин А B -- лист дерева (пусть это будет А), а другая не является концом одного из диаметров (пусть это будет B), то найдется вершина C (например, самая удаленная от А) и w(A <-> C) > w(A <-> B).
3) 3й поиск ищет второй конец диаметра, этот случай очень похож на 2й.
Любая критика приветствуется ;)
1 2
2 3
3 4
4 5
5 6
6 7
7 11
2 10
5 8
8 9
Диаметр 1->11. При запуске из 8 (2 сына) два максимума - это 1 и 10.
int len(int i, int p) {
int max = 0;
int max2 = 0;
int j = -1;
for (Link e : l[i]) {
if (e.i != p) {
int t = len(e.i, i) + e.c;
if (t > max) {
if (max > max2) {
max2 = max;
j = s[i];
}
max = t;
s[i] = e.i;
} else if (t > max2) {
max2 = t;
j = e.i;
}
}
}
if (j != -1 && max + max2 > best) {
best = max + max2;
x = i;
y = j;
}
return max;
}
UPD: в best - длина диаметра, в x, y - две вершины на цепи, по s[] можно восстановить всю цепь
А как в семпле задачи E получается 13? Не осилил...по идее должно быть 15..
Я поняд из условия, что ярмарок будет всего 2...или я не понял условия, или там трешняк написан...