ЗАДАЧИ
problems.ru
О проекте | Об авторах | Справочник
Каталог по темам | по источникам |
К задаче N

Проект МЦНМО
при участии
школы 57
Задача 76225
Тема:    [ Многомерные массивы ]
Сложность: 2+
Классы:
В корзину
Прислать комментарий

Условие

Та же задача, но количество операций должно быть порядка $ \sqrt{{\hbox{\texttt{n}}}}$. (В предыдущем решении, как можно подсчитать, порядка n операций.)

Решение

Нас интересуют точки решётки (с целыми координатами) в первом квадранте, попадающие внутрь круга радиуса $ \sqrt{{\hbox{\texttt{n}}}}$. Интересующее нас множество (назовём его X) состоит из объединения вертикальных столбцов убывающей высоты. 
*
* * *
* * *
* * * *

Идея решения состоит в том, чтобы " двигаться вдоль его границы", спускаясь по верхнему его краю, как по лестнице. Координаты движущейся точки обозначим <k,l>. Введём ещё одну переменную s и будем поддерживать истинность такого условия:

<k,l> находится сразу над k-ым столбцом;
s — число точек в предыдущих столбцах.
Формально:
  • l — минимальное среди тех l≥0, для которых <k,l> не принадлежит X;
  • s — число пар натуральных x,y, для которых x < k и  <x,y> принадлежит X.
Обозначим эти условия через (И).
        k := 0; l := 0;
        while <0,l> принадлежит X do begin
        | l := l + 1;
        end;
        {k = 0, l - минимальное среди тех l >= 0,
         для которых <k,l> не принадлежит X}
        s := 0;
        {инвариант: И}
        while not (l = 0) do begin
        | s := s + l;
        | {s - число точек в столбцах до k-го включительно}
        | k := k + 1;
        | {точка <k,l> лежит вне X, но, возможно, её надо сдвинуть
        |    вниз, чтобы восстановить И}
        | while (l <> 0) and (<k, l-1> не принадлежит X) do begin
        | | l := l - 1;
        | end;
        end;
        {И, l = 0, поэтому k-ый столбец и все следующие пусты, а
           s равно искомому числу}
Оценка числа действий очевидна: сначала мы движемся вверх не более чем на $ \sqrt{{\hbox{\texttt{n}}}}$ шагов, а затем вниз и вправо — в каждую сторону не более чем на $ \sqrt{{\hbox{\texttt{n}}}}$ шагов.

Источники и прецеденты использования

книга
Автор А.Шень
Название Программирование: теоремы и задачи
Издательство МЦНМО
Издание второе
Год издания 2004
глава
Номер 1
Название Переменные, выражения, присваивания
параграф
Номер 1
Название Задачи без массивов
задача
Номер 1.1.29

© 2004-... МЦНМО (о копирайте)
Пишите нам

Проект осуществляется при поддержке Департамента образования г.Москвы и ФЦП "Кадры" .