ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1024. Перестановки

Some Hints to solve it without TLE
Послано Grandmaster 24 дек 2014 04:31
Here are some hints
1)Try to find the number of steps for every number to the final position and put it into a array
2)then try to find the least common multiple off all elements from the resulted array
let's consider an exemple 1 2 3 4 (the input is 4      )
                          4 2 1 3               4 2 1 3
int var = a[1] (in this example a[1] = 4 considering the array start from 1).
while(var != i) (i = 1 the first index of the array)
{
     var = a[var]; ((var)4 = a[4], var = 3, than 3 = var[3], var = 1(found the last position)
     k++; (is the number of steps that take to bring to last position)
}
lets make the array of k
x[i] = k;  than k = 0;
i++;
this array will look like i <- 1,n (3 1 3 3)
than just find the least common multiple for all elements that is 3
input                output
4                    3
4 2 1 3
and now the sample
5
4 1 5 2 3
the count arraw will look like
x[] = (3 3 2 3 2)
and the least common multiple is 6
explenation
a[1] = 4
var = a[1] = 4(k = 1)
var = a[var](4 = a[4])(k = 2) var = 2 after 2 = a[2] = 1(k = 3) (finish)
first k = 3 steps
x[1] = 3
after
i++;
var = a[2] ( var = 1 ) after 1 = a[1] (var = 4) after (4 = a[4] = 2 = i) finish
k = 3
and so on until the last element
I hope this will help (i'm not very good at expanation but i try).