semik
1

Выведите минимальное количество перемещений

18.11.2011, 11:41. Показов 1805. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
3. Шашлыки

Имя входного файла input.txt
Имя выходного файла output.txt
Максимальное время работы на одном тесте 2 секунды
Ограничение по памяти 64 МБ

Вася с одноклассниками пошел на шашлыки. Ему поручили следить за мангалом. Через некоторое время он заметил, что шашлыки жарятся неравномерно. Поэтому он решил положить самые поджаристые шампура туда, где меньше жара и наоборот.
За один раз Вася может поменять местами два шампура. Так как они очень горячие, он хочет сделать минимальное количество перемещений. Помогите Васе подсчитать наименьшее количество перемещений шампуров учитывая, что он заранее выбрал какой шампур куда надо положить.

Формат входных данных:
В первой строке задано одно натуральное число N (1 ≤ N ≤ 105). Во второй строке через пробел записаны N различных чисел — номера позиций, куда нужно переместить соответствующие шампура. Все номера являются натуральными числами, не превосходящими N.

Формат выходных данных:
Выведите минимальное количество перемещений.

Пример
input.txt output.txt
4
1 4 3 2 1
5
4 2 1 3 5 2
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2011, 11:41
Ответы с готовыми решениями:

Минимальное количество перемещений
За один раз Вася может поменять местами два шампура. Помогите Васе подсчитать наименьшее...

Калькулятор: Выведите, какое минимальное количество кнопок должно быть добавлено
В новой программе OpenCalculator появилась новая возможность – можно настроить, какие кнопки...

Выведите минимальное количество дозаправок автобуса, которые необходимы, чтобы совершить k рейсов
Вот такая вот задачка, помогите пожалуйста

В выходной файл выведите одно целое число – минимальное количество банок краски, необходимых для покраски
Здравствуйте, белые рыцари программирования. Сегодня вопрос по задаче. Она очень легкая, но у меня...

1
30 / 24 / 22
Регистрация: 12.11.2011
Сообщений: 181
18.11.2011, 20:42 2
Лучший ответ Сообщение было отмечено как решение

Решение

Как я понимаю, на количество перестановок порядок перемещений не имеет значения, если хотя бы один из шампуров будет перемещаться на своё место. И в общем случае, надо переместить несколько "колец" из "неправильно" расположенных шампуров. Короче, у меня получилось следующее:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function KolVoPer(Kuda: array of Integer):Integer;
var
  ln:Integer; //Количество шампуров
  CurPos:Integer; //Текущий шампур
  KolVo:Integer; //Количество перемещений
  TempN:Integer; //Временная переменная
begin
//Установка начальных значений
  ln:=Length(Kuda); 
  CurPos:=0; 
  KolVo:=0;
 
  while CurPos<ln do //Проходим по всем шампурам
  begin
    while Kuda[CurPos]<>CurPos+1 do //Если шампур не на месте, то распутываем "кольцо"
     begin
                                       //Обмен местами шампуров
       TempN:=Kuda[Kuda[CurPos]-1];
       Kuda[Kuda[CurPos]-1]:=Kuda[CurPos];
       Kuda[CurPos]:=TempN;
                                     //Увеличиваем счетчик
       Inc(KolVo);
     end;
    inc(CurPos);
  end;
  Result:=KolVo;
end;
Перед началом работы алгоритма хорошо бы проверить на корректность значений, не то возможен уход в бесконечный цикл. С записью и чтением из файла, надеюсь, справитесь сами
0
18.11.2011, 20:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2011, 20:42
Помогаю со студенческими работами здесь

Задача "Сон шамана". В выходной файл выведите число K — минимальное время прохождения маршрута
Помогите решить эти 3 задачи Условие «Сон шамана» Работа шамана тяжела и опасна. Ему ежедневно...

Выведите минимальное количество монет, которые нужно перевернуть
На столе лежат n монеток. Некоторые из них лежат вверх решкой, а некоторые – гербом. Определите...

Количество перемещений в массиве
В первой строке записано целое положительное число n (1 ≤ n ≤ 100) —...

Найти количество перемещений первого элемента заданного массива
Помогите пожалуйста найти количество перемещений первого элемента Я не понимаю , как написать это...

Вычислите и выведите на экран минимальное значение
Вычислите и выведите на экран минимальное значение (лексикографически) в итераторе, используя...

Найдите и выведите на экран минимальное значение в массиве
Добрый вечер, может кто знает как решить эту задачу?) Дан массив с числами. Найдите и выведите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru