Задача: Время обслуживания. Для каждого посетителя парикмахерской (с одним мастером) известны следующие величины: [latex]t[/latex] — момент его прихода и [latex]\tau[/latex] — продолжительность его обслуживания. Сколько клиентов обслужит мастер за смену продолжительностью [latex]T[/latex]? Сколько рабочего времени он потратит на обслуживание?
[latex]T[/latex] |
t1 |
t2 |
k |
T1 |
600 |
200 210 500 550 |
50 300 10 50 |
4 |
410 |
600 |
50 100 200 498 550 |
30 50 200 10 40 |
5 |
330 |
600 |
0 80 100 367 680 |
20 30 20 30 50 |
4 |
100 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#include <iostream> using namespace std; int main() { int t1, t2, T2, T; T2 = 0; int k = 0; scanf ("%d", &T); //Задаем продолжительность смены парикмахера int T1 = 0; while ( EOF!=scanf("%d%d", &t1, &t2) ) { t1 = max(t1, T2); //Выбираем максимальное из времени прихода текущего клиента и ухода предыдущего if ( (t1>T) || (T2>T) ) break;//Условие выхода из цикла T2 = t1 + t2; //Расчетное время ухода предыдущего клиента T1 += t2; //Считаем общее время обслуживания k += 1; //Считаем количество обслуженных клиентов } printf("%d\n%d", k, T1); return 0; } |
Используем цикл while, который останавливается при достижении конца файла (input). С начала проверяем пришел ли текущий клиент во время обслуживания предыдущего, если да, то обслуживание этого клиента начнется с момента окончания предыдущего. Потом проверяем не выходит ли момент прихода клиента и сумма времени прихода клиента и время его обслуживания за рамки смены парикмахера. После запоминаем текущие t1 (момент прихода клиента) и t2 (время обслуживания) в новые переменные, чтобы в последующем шаге цикла проверить первое условие. Считаем общее время обслуживание прибавляя на каждом шаге цикла t2. В каждом шаге цикла прибавляем к переменной k +1, что и будет количеством обслуженных клиентов.
Ideone.
Related Images: