М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
larry19
larry19
26.04.2022 21:27 •  Информатика

Язык - c++ робот r2d2 случайно оказался на имперском корабле. он хочет покинуть его как можно скорее. для этого ему надо добраться до капсулы. для корабль представляет собой прямоугольную таблицу высотой n и шириной m . ячейка может быть либо пустой, либо представлять собой препятствие. за минимальное время добраться r2d2 из своей начальной точки до капсулы. при этом известно, что робот может передвигаться только в клетки, соседние по стороне. то есть двигаться только вверх, вниз, влево и вправо. также у робота есть текущее направление. движение вперед занимает у робота 1 секунду и поворот на 90∘ также занимает 1 секунду. зная начальное расположение робота и его направление. выясните за какое минимальное время он сможет покинуть корабль. при этом, если робот оказался в ячейке со капсулой, его текущее направление не имеет значения. изначально робот всегда смотрит вниз. формат входных данных в первой строке вводятся два целых числа n и m (1≤n,m≤1000 ) - высота и ширина. в следующих n строках вводятся m символов ai,j. значения ячейки ai,j могут быть # - препятствие, . - пустая клетка, s - начальная позиция робота капсула. гарантируется, что ровно одна клетка в таблице имеет значение s . гарантируется, что ровно одна клетка в таблице имеет значение f . формат выходных данных выведите минимальное количество секунд, нужное чтобы добраться роботу до капсулы или −1 , если это сделать невозможно система оценки в 25 тестов. за будут начисляться пропорционально количеству успешно пройденных тестов. первые два теста с тестами из условия. в тестах 1−7 следующие ограничения: 1≤n,m≤10 . в тестах 1−14 следующие ограничения: 1≤n,m≤100 . в тестах 1−17 следующие ограничения: 1≤n,m≤500 . sample input 1: 3 3 s.. ..f sample output 1: 5 sample input 2: 3 3 s.. ### ..f sample output 2: -1

👇
Открыть все ответы
Ответ:
Вапрос86
Вапрос86
26.04.2022
#include <algorithm>
#include <iostream>
#include <vector>

bool ToLess(int a, int b) {
    return a > b;
}

int main() {
    int count;
    std::cin >> count;
    std::vector<int> vectorOfNombers(count);
    for (size_t i = 0; i != count; ++i) {
        std::cin >> vectorOfNombers[i];
    }

    sort(vectorOfNombers.begin(), vectorOfNombers.begin() + count / 2 - 1);           sort(vectorOfNombers.begin() + count / 2, vectorOfNombers.end(), ToLess);

    for (size_t i = 0; i != count; ++i) {
          std::cout << vectorOfNombers[i] << " ";
     }
}
4,8(15 оценок)
Ответ:
alanragibov02
alanragibov02
26.04.2022
//Обьявляем дополнительные переменные и главный массив, а также два дополнительных - они будут "половинками".
var
  a, b, c: array [1..100] of longint;
  i, min, n, j, t: longint;

begin
  //Читаем количество элементов в нашем массиве.
  readln(n);
 
  //Читаем массив.
  for i := 1 to n do read(a[i]);
 
  //Заполняем первую "половинку".
  for i := 1 to n div 2 do b[i] := a[i];
 
  //Заполняем вторую "половинку". Но раз это уже вторая "половинка" главного массива, то и
  //цикл теперь должен начинаться со второй части массива, а заканчиваться уже в его конце.
  for i := n div 2 + 1 to n do c[i - n div 2] := a[i];
 
  //Теперь отсортируем первую "половинку" методом выбора. Идея этого метода
  //основывается на том, что мы ищем минимальный среди неотсортированных элемент,
  //а затем просто swap-аем его с тем, который стоит сразу после отсортированных.
  for i := 1 to (n - 1) div 2 do
  begin
    min := i;
    for j := i + 1 to n div 2 do
      if b[min] > b[j] then
        min := j;
    if min <> i then begin
      t := b[i];
      b[i] := b[min];
      b[min] := t;
    end;
  end;
 
  //Затем вторую точно также, только стоит обратить внимание на сравнения.
  //Так как надо отсортировать по убыванию, то теперь сравнение перед "swap"-ом
  //будет другим.
  for i := 1 to (n - 1) div 2 do
  begin
    min := i;
    for j := i + 1 to n div 2 do
      if c[min] < c[j] then
        min := j;
    if min <> i then begin
      t := c[i];
      c[i] := c[min];
      c[min] := t;
    end;
  end;
 
  //А теперь просто по очереди выводим готовые "половинки", не забывая ставить
  //пробел после вывода каждого элемента.
  for i := 1 to n div 2 do write(b[i], ' ');
  for i := 1 to n - n div 2 do write(c[i], ' ');
end.
4,6(79 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ