Блог пользователя ivan.popelyshev

Автор ivan.popelyshev, 16 лет назад, По-русски
Начнём с конца.

Задача С. Commentator problem

Пусть R это расстояние из точки А до какой-то окружности с центром в О и радиусом r. Тогда из точки окружность видна под углом .
Таким образом три стадиона видны под одним углом если R1 / r1 = R2 / r2 = R3 / r3.
Возьмём две различные точки A, B. Множество точек C таких что AC / BC = const является либо прямой - серединным перпендикуляром AB, либо окружностью с центром где-то на прямой AB, которую легко вычислить по двум точкам лежащим на прямой AB для которых выполняется условие на AC / BC.
Положим X1 это множество точек из которых под одним углом видны стадионы 1 и 2, а X2 определим аналогично только для стадионов 2 и 3. Понятно что ответ принадлежит пересечению X1 и X2. Поскольку центры всех трёх стадионов не лежат на одной прямой то кол-во точек в пересечение X1 и X2 будет конечным.

Проверим их все: искомая точка должна быть ближайшей к какому-либо из стадионов. Так как стадионы не пересекаются, то такая точка не будет лежать внутри стадиона.
Как получить большую окружность для множества X1: поместим центры стадионов в точки находящиеся далеко, например (0, 0) и (1000, 0). Отношение радиусов стадионов должно быть как можно близким к 1, например . центр и радиус новой окружности будут иметь порядок 106 Ответ надо знать с точностью до 10 - 5. Грубо говоря, нужно 11 знаков, типа double точно хватит.

Очень интересно узнать на чём валились решения этой задачи.

Задача B. Наименее круглый путь

Решим задачу для случаев где матрица вся положительная.
Пусть в конце мы получили положительное число N = 2k· 5m·(другие простые). Количество нулей на конце N равно min(k, m). С помощью динамики найдём наименьшее возможное значение k (пусть это k1 ) и наименьшее значениe m (соответственно m1), а также пути приводящие к этим значениям. если k1 < m1 то выберем путь соответствующий k1, иначе m1.
Таким образом, min(k, m) это верхняя оценка ответа. Докажем что это и нижняя оценка. Пусть существует путь приводящий к числу с количеством нулей меньшим чем min(k, m). Тогда в разложении получившегося числа либо показатель степени при двойке k < k1 либо показатель степени при пятёрке k < k2. Получили противоречие.
Значит, достаточно получить показатели степеней 2-ек и 5-ок в каждом числе и прогнать на двух получившихся матрицах динамику.

В случае если в матрице присутствуют нули, надо отдельно посчитать пути проходящие через них и не проходящие.
Заменим все 0 на 10 и используем метод описанный выше, при этом для путей проходящих через нули мы будем получать результат с как минимум одним ноликом на конце. Если метод вернул путь с результатом без ноликов на конце, то он является ответом. Иначе можно взять любой путь проходящий через нолик.

Итого сложность алгоритма зависит только от сложности динамики, то есть это O(N· M).

Задача А. Победитель

Простая задача на реализацию.
За первый проход считаем сумму очков каждого игрока в конце игры. Пусть M - максимум среди сумм. Далее заново проходим по конам. Если в каком-то кону очки игрока X стали не меньше M и в конце игры X будет иметь M очков то выводим ответ и выходим из программы.
Следующий тест иллюстрирует тот факт что игрок может набрать больше M очков, затем слить часть очков а в конце победить.
Input:
Masha 12
Masha -5
Sasha 10
Masha +3
Output:
Masha


Разбор задач Codeforces Beta Round 2
  • Проголосовать: нравится
  • +12
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо, Иван. Переведешь?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кто там ответственен за ТеХ? почему у меня полразбора курсивом выделено? :(
16 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
Excellent tutorial !! Would like to see more from you... 
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Can somebody help me?
I have WA 2 in problem C
Please, give me some test :) thanks
»
13 лет назад, скрыть # |
 
Проголосовать: нравится -17 Проголосовать: не нравится

task B, submission #3726143, I got:

Test: #31, time: 3421 ms., memory: 172 KB, exit code: 0, checker exit code: 1, verdict: WRONG_ANSWER
...
Checker Log
wrong answer Jury has better answer: ja=1 vs pa=2974

Can I see what concrete input was in this test to find the reason? And who is Yuri? ))

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

could someone help me with the problem B, please ?

here's my code: http://ideone.com/1Juljl

thanks in advance :)

»
9 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

why problem B is O(n*m)? isn't it o(n*n)?

»
8 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
»
6 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

[Solved]

»
6 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

In problem B if the input is

3

1 2 3

4 5 6

7 8 9

can one solution could be RRDD too?

»
6 лет назад, скрыть # |
Rev. 4  
Проголосовать: нравится +10 Проголосовать: не нравится

Problem A)

Failing test case 10 W.A Can anybody please help me ?

my submission link is here — https://mirror.codeforces.com/contest/2/submission/94976880


int n; map<string, int> score_board; map<int, vector<string>> rev_board; void solve() { cin >> n; for(int i=0; i<n; ++i) { string name; int score; cin >> name >> score; score_board[name] += score; rev_board[score_board[name]].push_back(name); } auto it=rev_board.end(); --it; cout << it->second[0]; }
  • »
    »
    11 дней назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Your logic fails because it picks the first person to reach a score that happens to be the maximum at some point, rather than the person who reached the final maximum first

    For example:

    Round Player Change Alice's Score Bob's Score
    1 Alice +15 15 0
    2 Alice -10 5 0
    3 Bob +10 5 10

    Your code records Alice as a winner, but the real winner is Bob

    You can try again or check my code:

    My Code