Это олимпиада по икт. Студент Кеша устроился ** летнюю стажировку. Кеша охотно бы ходил...

0 голосов
206 просмотров

Это олимпиада по икт. Студент Кеша устроился на летнюю стажировку. Кеша охотно бы ходил на работу пешком, но, к его сожалению, офис компании расположен довольно далеко от дома Кеши. А поскольку в городе проводится спортивный праздник, общественный транспорт ходит крайне редко, и желающих ехать на нём очень много. Впрочем, Кеша уже давно присматривается к электросамокату, и хочет выяснить, много ли усилий ему придётся приложить, чтобы добраться на нём до места работы. Кеша уже провёл некоторые расчёты и выяснил, что его маршрут содержит в себе ровные участ- ки суммарной длиной p единиц, а также участки, на которых ему придётся подниматься в гору, суммарной длиной m единиц. Участки, на которых Кеша будет двигаться под гору, он решил не учитывать, поскольку электросамокат будет катиться на таких участках по инерции. При движении по ровному участку аккумулятор самоката будет расходовать 1 единицу ёмкости, а при движении в гору — 2 единицы ёмкости на единицу длины. Если же Кеша не будет включать электродвигатель, то для перемещения на каждой единице длины ровного участка ему потребу- ется приложить усилие величины a, а на каждой единице длины участка, ведущего в гору, ему потребуется приложить усилие величины b (b > a). Ёмкость аккумулятора составляет q единиц. Кеша полагает, что в разные дни он может включать электродвигатель на разных участках. И пока хочет узнать, какое максимальное и какое минималь- ное количество усилий ему придётся приложить, чтобы добраться до работы, если по дороге он полностью израсходует энергию, запасённую в аккумуляторе.


Информатика (12 баллов) | 206 просмотров
Дан 1 ответ
0 голосов

Полагаю, это дубликат znanija.com/task/29739492, но без данных о входных/выходных данных. Тогда я продублирую решение на C#.

using System;

using System.Linq;

namespace Samokat

{

   class Program

   {

       static void Main(string[] args)

       {

           var input = Console.In

               .ReadLine()

               .Split(',', ' ')

               .Where(t => !String.IsNullOrEmpty(t))

               .Select(int.Parse)

               .ToList();

           int flatLen = input[0];

           int uphillLen = input[1];

           int flatDrain = input[2];

           int uphillDrain = input[3];

           int fuel = input[4];

           // minimizing flat travel

           int minFlatLen = flatLen - fuel;

           minFlatLen = minFlatLen < 0 ? 0 : minFlatLen;

           int maxUphillLen = uphillLen - (fuel - (flatLen - minFlatLen)) / 2;

           maxUphillLen = maxUphillLen < 0 ? 0 : maxUphillLen;

           // minimizing uphill travel

           int minUphillLen = uphillLen - (fuel) / 2;

           minUphillLen = minUphillLen < 0 ? 0 : minUphillLen;

           int maxFlatLen = flatLen - (fuel - (uphillLen - minUphillLen) * 2);

           maxFlatLen = maxFlatLen < 0 ? 0 : maxFlatLen;

           int minFlatTravelDrain = minFlatLen * flatDrain + maxUphillLen * uphillDrain;

           int maxFlatTravelDrain = maxFlatLen * flatDrain + minUphillLen * uphillDrain;

           var minDrain = Math.Min(minFlatTravelDrain, maxFlatTravelDrain);

           var maxDrain = Math.Max(minFlatTravelDrain, maxFlatTravelDrain);

           Console.Out.WriteLine(minDrain);

           Console.Out.WriteLine(maxDrain);

       }

   }

}

(400 баллов)