Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2013, 14:18   #1
MagAragorn
Пользователь
 
Регистрация: 22.04.2013
Сообщений: 25
По умолчанию Необходимо отсортировать N элементов по К параметрам по убыванию.

Ученики физико-математического класса любят шутить. Ярик начал коллекционировать юмор своих одноклассников. После нескольких дней кропотливой работы шуток оказалось слишком много, поэтому находчивый Ярик решил систематизировать свою коллекцию.

Каждую из N шуток Ярик оценил по K различным параметрам, таким как <<оригинальность>>, <<остроумность>>, <<классность>> и др. Ярик хочет отсортировать шутки от самой лучшей к самой плохой.

Шутка $X$ хуже шутки Y, если первый параметр шутки X меньше первого параметра шутки Y. Если эти параметры равны, то Ярик сравнивает вторые параметры, и т. д. Таким образом, при равенстве i-ых параметров нужно сравнивать (i + 1)-ые параметры, и т. д.

Так как Ярик слишком увлечён игрой в DotA, сортировать его шутки придётся вам.

\InputFile
В первой строке введены два целых числа $N$ и $K$ ($1 \le K \le 13$), разделённых пробелом --- количество шуток в коллекции Ярика и количество параметров, по которым Ярик оценил каждую шутку.

В следующих N строках описываются шутки. В i-ой строке введено K целых чисел , разделённых пробелом --- параметры i-ой шутки.

Гарантируется, что никакие две шутки Ярик не оценил одинаково.

\OutputFile
Выведите N целых чисел через пробел --- номера шуток, отсортированных по выше указанным правилам.

Требуется воспользоваться процедурой MergeSort. У меня проблемы при их сравнивании. Вот алгоритм действий

В этой задаче пары шуток нельзя было сравнить обычным знаком <.

Чтобы сравнить шутки, нужно было пройти циклом от 1 до K по параметрам, а затем сравнивать каждый параметр в отдельности.
Как только соответствующие параметры у данных шуток не совпали, нужно прервать цикл.

Пример. Ввод
2 3
1 2 3
1 2 4
Вывод
2 1


Пожалуйста,помогите мне. Я конечно поразбираюсь,но пора делать уроки,а олимпиада уже послезавтра.
MagAragorn вне форума Ответить с цитированием
Старый 25.04.2013, 15:13   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Пожалуйста,помогите мне. Я конечно поразбираюсь,но пора делать уроки,а олимпиада уже послезавтра.
может ты просто
Цитата:
слишком увлечён игрой в DotA
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 25.04.2013, 15:16   #3
1mutant1
Пользователь
 
Регистрация: 23.04.2013
Сообщений: 18
По умолчанию

Шоб я так жил , в то время когда я учавствовал в олимпиадах по программированию интернета не было
Но таким путём участвовать в олимпиадах по программирыванию точно не стоит!!!
это конечно офтопик, да простит меня модератор
1mutant1 вне форума Ответить с цитированием
Старый 25.04.2013, 16:14   #4
MagAragorn
Пользователь
 
Регистрация: 22.04.2013
Сообщений: 25
По умолчанию

Нет)))
Я не играю в игры,подобные доте.
Конкретно сейчас я учу биологию,мне отвечать.
И это не задание олимпиады этой, оно с прошлого года.
Все же спасибо заранее
MagAragorn вне форума Ответить с цитированием
Старый 25.04.2013, 20:13   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Учитывая, что это прошедшая олимпиада (задание ведь уже известно) могу предложить простое решение:
1. Пишем ту часть, которая считывает исходные данные.
2. При считывании параметров шуток формируем строки и записываем в массив.
3. Полученный массив сортируем по убыванию.
Строки можно просто сравнивать^
Код:
  if ('abcd' < 'abce') then ...
  if ('1234' > '1233') then ...


Как-то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 25.04.2013, 20:34   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
но пора делать уроки
Ну ессесно! А нам-то ничего делать не надо..

Виктор, отличная идея! Т.к. Length(m) будет равно Length(m-1) то сравнение пойдет по ASCII кодам.. а это нам на руку. (вот зараза.. плюс поставить не разрешает..).
А для конспирации можно загнать это в процедуру под название Merge Sort
Poma][a вне форума Ответить с цитированием
Старый 25.04.2013, 21:07   #7
1mutant1
Пользователь
 
Регистрация: 23.04.2013
Сообщений: 18
По умолчанию

Согласен, решение класс плюсанул
1mutant1 вне форума Ответить с цитированием
Старый 25.04.2013, 21:47   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Навеяно решением Виктора, а если сделать все слегка попроще? Тоесть делать практически то, что предложил Виктор, НО с числами. У этого есть свои преимущества :
- Быстродействие
- Это понятно даже на интуитивном уровне, нежели работа со строками (ИМХО)
Но есть и недостатки :
- Кол-во позиций для сравнения будет введено в жестокие рамки.

И так мой вариант :
Код:
for i := 1 to n do begin
      a[i] := 0;
      for j := 1 to k do begin
           ReadLn (t);
           a[i] := a[i]*10 + t
      end
end;
Тоесть схема Горнера..
Не проверял..
Poma][a вне форума Ответить с цитированием
Старый 26.04.2013, 12:25   #9
MagAragorn
Пользователь
 
Регистрация: 22.04.2013
Сообщений: 25
По умолчанию

Отличная идея,Виктор, напишу и отпишусь,как работает!
MagAragorn вне форума Ответить с цитированием
Старый 26.04.2013, 12:44   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Отличная идея,Виктор
Но вот незадача
Цитата:
В i-ой строке введено K целых чисел , разделённых пробелом --- параметры i-ой шутки.
И НИ слова от что числа<10 (чтобы без помех работала ASCII сортировка)
ни какое-либо другое ограничение (кроме общих ограничений языка целое <2**31)
как вам такой пример
Код:
Пример. Ввод
2 3
1 22 3
12 2 41
P.S. но даже в таком случае можно выйти на символьную сортировку
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.04.2013 в 12:54.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка матрицы. Первую и вторую строки отсортировать выбором по убыванию, пятый и шестой столбец отсортировать (С++) Sasha316 Помощь студентам 0 23.11.2012 00:48
отсортировать символы по убыванию частот sacreden Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 25.02.2012 15:55
помогите отсортировать значения по параметрам malenro84 Microsoft Office Excel 1 05.05.2009 23:59
Отсортировать массив по убыванию в С++ sershok Помощь студентам 5 16.02.2009 00:31