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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2014, 12:10   #1
Jilia
Новичок
Джуниор
 
Регистрация: 19.01.2014
Сообщений: 3
Восклицание SOS! Помогите решить задачу!

Старший брат Йцукена Кенцутр работает в научно-исследовательском центре по изучению людей. Кенцутру вверены n земных городов. Информация о каждом городе выводится на экран терминала, и для каждого города отведён свой терминал. Для удобства наблюдения терминалы стоят в ряд. В начале наблюдения в каждом городе Кенцутру заранее известна численность населения.
В нормальных условия планеты Земля численность населения городов растёт по следующему правилу: достигнув популяции в f человек, поселение живёт в течении max(1000 – f, 1) лет, после чего рождается новый человек. От начального момента времени до появления ребёнка на свет город численностью f также ждёт max(1000 – f, 1) лет.
Например: колония с начальной численность в 996 человек будет расти следующим образом:
Момент времени (лет) Численность населения Время до рождения ребёнка
0 996 4
4 997 3
7 998 2
9 999 1
10 1000 1
11 1001 1
12 1002 1
… … …
Появление на свет каждого ребёнка Кенцутр должен фиксировать в специальном журнале. Будем считать, что запись он делает мгновенно, но при этом он должен на момент рождения человека находиться рядом с терминалом города, в котором это произошло.
Так как Вицкликутяне физически не очень хорошо развиты, а центр обработки данных очень большой, то на перемещение от одного терминала к соседнему у Кенцутра уходит целый земной год. В начальный момент времени Кенцутр стоит у первого терминала.
Вычислите, в течении какого наибольшего периода времени Кенцутр сможет добросовестно выполнять свою работу.

Входные данные
В первой строке содержится целое число n (2 ≤ n ≤ 50) – количество городов или, соответственно, терминалов. Каждая из следующих n строк содержит одно целое число ai (1 ≤ ai ≤ 2011) – численность i-го поселения.

Выходные данные
Выведите единственное число - момент времени, когда родится первый человек, о котором Кенцутр не сможет сделать запись в журнале.

Пример

Входные данные
3
996
1
994

Выходные данные
7

В приведенном примере Кенцутр сначала ждет у первого терминала до появления ребенка через 4 года. После этого он перемещается к третьему терминалу (на это уходит 2 года) и как раз успевает к рождению ребенка на 6 году. Однако вернуться к первому терминалу, где будет зарегистрировано появление нового человека на 7 году, он уже не успевает
Jilia вне форума Ответить с цитированием
Старый 19.01.2014, 12:30   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Ваша задачка, легко решается методами линейного программирования. Как составить уравнения, подсказывать не буду (своих наработок у Вас нет). Я дал направление, подумайте. Если что не получится, рад буду помочь разобраться.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.01.2014, 12:35   #3
Jilia
Новичок
Джуниор
 
Регистрация: 19.01.2014
Сообщений: 3
Радость спасибо за намек


наконец то я встретила тут умных людей ! УРА!
Jilia вне форума Ответить с цитированием
Старый 19.01.2014, 12:44   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Jilia Посмотреть сообщение

наконец то я встретила тут умных людей ! УРА!
Для проверки своих уравнений, скачайте программку - Linear_Optimization. До 15-и переменных/ограничений, она бесплатная.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 19.01.2014 в 12:48.
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.01.2014, 13:03   #5
Jilia
Новичок
Джуниор
 
Регистрация: 19.01.2014
Сообщений: 3
Лампочка

и за это благодарю!
Jilia вне форума Ответить с цитированием
Старый 19.01.2014, 14:43   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сразу и линейное программирование Вот так спокойно решается
Код:
program Project1;

{$APPTYPE CONSOLE}

uses SysUtils, Types, Math;

var n,i,j,Position,Years,Distance0,Distance1,Distance2: Integer;
    m: array of TPoint;
    EndCalc: Boolean;

begin

  ReadLn(n);
  SetLength(m,n);
  for i:=0 to n-1 do begin
    ReadLn(m[i].X);
    m[i].Y:=Max(1000-m[i].X,1);
  end;

  Years:=0;
  Position:=0;
  EndCalc:=False;

  repeat
    Distance1:=MaxInt;
    Distance2:=-MaxInt;
    j:=-1;
    for i:=0 to n-1 do begin
      Distance0:=Abs(i-Position);
      if (Distance0<=m[i].Y) and (m[i].Y<Distance1) then begin Distance1:=m[i].Y; j:=i; end
      else if (Distance0>m[i].Y) and (m[i].Y<Abs(Distance2)) then Distance2:=-m[i].Y;
    end;
    if (j>-1) and (Distance1<Abs(Distance2)) then begin
      Inc(Years,Distance1);
      Inc(m[j].X);
      Position:=j;
      for i:=0 to n-1 do if i=Position then m[i].Y:=max(1000-m[i].X,1) else Dec(m[i].Y,Distance1);
    end
    else begin
      Inc(Years,Abs(Distance2));
      EndCalc:=True;
    end;
  until EndCalc;

  WriteLn(Years);
  ReadLn

end.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу cinik Помощь студентам 1 07.10.2009 18:36
Помогите решить задачу SC Muska Microsoft Office Excel 22 15.04.2009 18:12