Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Конкурсы и Олимпиады по Машинному программированию (КОМП) Как загнуть массив в кольцо


Информационный Канал Subscribe.Ru

Уже несколько участников преодолели уровень 6. Но уровень 7 оказался серьёзным препятствием для лидеров. Эта ситуация даёт возможность остальным участникам сократить своё отставание.

Сегодня разберёмся с задачей третьего уровня, на котором ещё застряли некоторые участники.

Как загнуть массив в кольцо

Сложность задачи в том, что нужно уметь работать с данными, свёрнутыми в кольцо. На самом деле ни чего сворачивать не нужно, достаточно правильно работать с индексами массива. Задачу третьего уровня решить почти также легко как и задачу уровня 0. Единственная разница в том, что все счетчики вычислять по модулю длины. Вычисления по модулю и создадут кольцо.

Подробнее. Удобнее всего хранить сроку из N символов в массиве с индексами от 0 до N-1. Тогда тогда можно в счётчикам прибавлять любое число и брать остаток от деления результата на N. Это создаст иллюзию движения по кругу. Вычитать по модулю тоже легко. Нужно перед вычитанием добавить N, затем вычесть и взять остаток от деления результата на N.

Например, операции движения счётчика в вправо и влево на 1 на языке Pascal:
R := (R+1) mod N;
L := (L+N-1) mod N

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



Автор: Пупышев Вячеслав Викторович   
e-mail: pvv@uni.udm.ru   
Web: http://colymp.da.ru   

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.comp
Архив рассылки
Отписаться
Вспомнить пароль

В избранное