Матч 379, Загрузка файлов (DownloadingFiles)

Дивизион 2, Уровень 1

 

Имеется набор файлов, которые следует загрузить из сети Интернет. Для каждой загрузки известны ее скорость (килобайт / в секунду) и время (в секундах). Сумма всех скоростей равна пропускной способности канала, которая остается постоянной в процессе загрузки. Если некоторый файл загрузится раньше остальных, то его пропускная способность распределяется на загрузку остальных файлов. Необходимо вычислить время, за которое произойдет загрузка всех файлов.

 

Класс: DownloadingFiles

Метод: double actualTime(vector<string> tasks)

Ограничения: tasks содержит от 1 до 50 строк в формате “<speed> <time>”, где 1 £ <speed> £ 100, 1 £ <time> £ 10000.

 

Вход. Набор заданий, содержащих информацию о скорости и времени загрузки файлов.

 

Выход. Время, за которое произойдет загрузка всех файлов.

 

Пример входа

tasks

{"3 57","2 22"}

{"3 1057","2 1022"}

{"25 1000","5 5000","10 5000"}

 

Пример выхода

43.0

1043.0

2500.0

 

 

РЕШЕНИЕ

элементарные вычисления

 

Вычисляем пропускную способность канала Speed и общий объем загружаемой информации Volume. Последний равен сумме произведений скорости на время загрузки каждого файла. Искомое время загрузки всех файлов равно Volume / Speed.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

using namespace std;

 

class DownloadingFiles

{

public:

  double actualTime(vector<string> tasks)

  {

    int Speed, Volume, _speed, time, i;

    for(Speed = Volume = i = 0; i < tasks.size(); i++)

    {

      sscanf(tasks[i].c_str(),"%d %d",&_speed,&time);

      Speed += _speed;

      Volume += _speed * time;

    }

    return 1.0 * Volume / Speed;

  }

};