Матч
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;
}
};