Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Mngame

Задача на дп (олимпиадная)

02.12.2012, 15:35. Показов 2503. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, имеется данная задача, основная проблема состоит в том, что мое решение никак не проходит по времени. Пробовал писать через map / set / vector / простой дин.массив. Не проходит! Понимаю, что нужно до чего-то догадаться, не выходит. Очень прошу разъяснить, а если не лень, то написать программу
Поясню, что данная задача не входит в какую либо контрольную или еще что-то, это разбор прошлой олимпиады.
За помощь огромное спасибо.
Кликните здесь для просмотра всего текста


Ограничение по времени 1 секунда на тест

В течение всего года бассейн «Золотая рыбка» пользуется большой популярностью у спортсменов и любителей плавания. Его раздевалка состоит из бесконечного числа одноместных шкафчиков, пронумерованных натуральными числами. В течение дня постоянно занимающиеся спортсмены по прибытии занимают заранее выбранные ими шкафчики. Если выбранный спортсменом шкафчик свободен, то спортсмен занимает его. В противном случае спортсмен занимает первый свободный шкафчик с большим номером. Некоторые спортсмены заканчивают свою тренировку, исходя из индивидуального графика, и освобождают свой шкафчик досрочно. Сразу после ухода спортсмена его шкафчик становится доступным вновь пришедшему спортсмену.
Cмоделируйте работу работника reception, ответственного за распределение мест в раздевалке, и научитесь быстро сообщать прибывающим спортсменам, каким шкафчиком им следует воспользоваться.

Формат входного файла.
В первой строке входного файла число n – количество прибытий и убытий в течение дня (n<=100000). Следующие n строк содержат информацию о приходящих и уходящих спортсменах. Число k>0 обозначает, что прибыл спортсмен, который желает занять шкафчик с номером k (k<=100000). Число k<0, означает, что освобождается шкафчик под номером k, который занимал спортсмен, окончивший тренировку. (Гарантируется, что этот шкафчик не был пуст).

Формат выходного файла.
Для каждого прибывающего спортсмена выведите одно натуральное число – номер шкафчика, которым он может воспользоваться.

Пример файла входных данных и файла с результатом.

d.in
6
5
5
5
-6
5
5


d.out
5
6
7
6
8


Добавлено через 2 часа 5 минут
Никто не в силах?

Добавлено через 2 часа 6 минут
Ребят, идейку
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2012, 15:35
Ответы с готовыми решениями:

Олимпиадная задача
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main() { unsigned int N; cout&lt;&lt;&quot;N=&quot;;...

Олимпиадная задача
Дошел до этой олимпиадной задачи и впал в ступор. Нагуглил, что можно решить с помощью матриц, либо с помощью графов, но какого-то...

C++. Олимпиадная задача
Здравствуйте! Код не проходит какой-то тест, может алгоритм не правильный. И если не правильный, то как исправить? Помогите найти ошибку....

3
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
02.12.2012, 15:52
Покажите вашу реализацию, что-ли.
0
Mngame
02.12.2012, 16:56
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <fstream>
 
 
using namespace std;
 
bool a[200001];
 
int find(int x)
{
    while (a[x]) x++;
    return x;
}
 
int main()
{
    ifstream in("d.in");
    ofstream out("d.out");
    int n,command;
    in >> n;
    memset(a, false, 200001);
    for (int i = 0; i < n; i++) {
       in >> command;
       if (command < 0) {
              command = - command;
              a[command] = false;
       }
       else if (a[command] == true) {
                 command = find(command+1);
                 a[command] = true;
                 out << command << endl;
            }
            else
            {
                a[command] = true;
                out << command << endl;
            }
    }
 
 
    return 0;
}
Не поверите, но самая быстрая моя реализация, максимальный тест 5 сек делает. Вся динамика шла за 10сек.
Sunrise7463
18.01.2013, 18:18
если коротко-нужно составить бинарное дерево из логических переменных с проверкой условия(медиана больше номера необходимого шкафчика),где последние листья-это шкафчики,и "заполнять" ветку,когда шкафчик найден.
т.е. если первый и второй шкафчик заняты их узел тоже занят
т.о. когда первые 5000 шкафчиков заняты ты не перебираешь заново,а уже в самом начале дерева переходишь на правую ветку
если сделаю код-пришлю(сделаю на паскале)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2013, 18:18
Помогаю со студенческими работами здесь

Олимпиадная задача
Есть такая задачка: В ряд выписаны числа, состоящие только из цифр 1, 3, 7: 1, 3, 7, 11, 13, 17, ... Необходимо по номеру N определить...

Олимпиадная задача
Задача A. Олимпиада Маленький мальчик Гриша уже сам начал делать олимпиады, и ему как раз нужно подготовить Открытую Олимпиаду по...

Олимпиадная задача
Вот наткнулся сегодня на такую задачу: Всем известно, что в позапрошлом веке ковбои занимались перегоном скота. Перегон скота всегда...

Олимпиадная задача
Был в прошлом году на олимпиаде по программированию и там была такая задача: После запуска программы пользователь должен начать...

Олимпиадная задача
Недавно был на олимпиаде по программированию, там была задача, решение аналогов которой я не нашел. Дано натуральное число, состоящее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru