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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2023, 15:35   #1
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
Плохо В чём проблема в задании «Обработка пакетов через контейнер очередь»?

Не могли бы мне доходчиво объяснить что исправить и как чтобы всё работало как надо суть в том что чутка не понимаю
Условие :
Первая строка входа содержит размер буфера size и
число пакетов n. Каждая из следующих n строк содержит два
числа: время arrivali прибытия i-го пакета и время durationi
,
необходимое на его обработку. Гарантируется, что arrival1 ≤
arrival2 ≤ · · · ≤ arrivaln. При этом может оказаться, что
arrivali−1 = arrivali
. В таком случае считаем, что пакет i − 1 поступил раньше пакета i.
Формат выхода. Для каждого из n пакетов выведите время, когда
процессор начал его обрабатывать, или −1, если пакет был отброшен.
Ограничения. Все числа во входе целые. 1 ≤ size ≤ 105
; 0 ≤ n ≤ 105
;
0 ≤ arrivali ≤ 106
; 0 ≤ durationi ≤ 103
; arrivali ≤ arrivali+1 для всех
1 ≤ i ≤ n − 1.
Пример.
Вход:
1 0
Выход:
Если пакетов нет, выводить ничего не нужно.
Пример.
Вход:
1 1
0 0
Выход:
0
Пакет поступил в момент времени 0, и компьютер тут же начал
его обрабатывать. Но при выводе у меня получается вход 1 0 и выход пустое значение (Empty result) в Visual studio проверял код всё нормально а вот в стёпике ругается может скажите как дополнить код чтоб решить данную ошибку

Код:
#include <iostream>
#include <queue>
using namespace std;

int main() {
    int bufferSize, numPackets;
    
    queue<int> ends; // очередь окончаний
    int startTime = 0; // возможный старт

    for (int i = 0; i < numPackets; i++) {
        int arrival, duration;
        cin >> arrival >> duration;

        // выясняем, когда на самом деле можно стартовать пакет
        int realStart = max(startTime, arrival);

        // Извлекаем из очереди пакеты, которые обработаны на момент старта
        while (!ends.empty() && ends.front() <= realStart) {
            ends.pop();
        }

        if (ends.size() < bufferSize) {
            // если на момент старта есть места в очереди, стартуем
            cout << realStart << endl;
            startTime = realStart + duration; // окончание обработки
            ends.push(startTime);
        }
        else {
            // Очередь полна, пакет не может быть обработан
            cout << -1 << endl;
        }
    }
ChestIotVaga вне форума Ответить с цитированием
Старый 28.02.2023, 18:38   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Вы потеряли ввод bufferSize, numPackets и конец функции main, когда выкладывали сюда код.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка слипшихся пакетов (clientsocket) mavurece Фриланс 2 13.04.2017 13:44
вводим 15 элементов в очередь, затем выводим на экран эту очередь и добавил в очередь еще один элемент. Потом удаляем любой элемен Xumera C++ Builder 2 07.12.2013 13:56
классы. контейнер типа очередь Laplas Помощь студентам 0 29.05.2010 23:57
Проблема со сборкой IP пакетов Дядя Фёдор Работа с сетью в Delphi 0 28.08.2007 11:19