Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mngame
Сообщений: n/a
#1

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

02.12.2012, 15:35. Просмотров 676. Ответов 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 минут
Ребят, идейку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 15:35     Задача на дп (олимпиадная)
Посмотрите здесь:

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

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

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

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

Олимпиадная задача - C++
#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++
Дошел до этой олимпиадной задачи и впал в ступор. Нагуглил, что можно решить с помощью матриц, либо с помощью графов, но какого-то...

Олимпиадная задача - C++
Алфавит мурмарианской системы счисления включает три цифры - 1, 2 и 3. Одна из популярных социальных сетей &quot;НаМурмаре&quot; при регистрации...

Олимпиадная задача на числа - C++
Условие задачи: Задано 121 натуральне число : 1...121 .Разбить числа в 11 групп так,чтобы каждая группа вмещала 11 чисел,каждое число...

Олимпиадная задача. Рыбаки - C++
Подскажите пожалуйста, как решается эта задача. Однажды N рыбаков отправились на рыбалку, где поймали X рыб. После этого рыбаки легли...

Олимпиадная задача. Деревни - C++
Всем привет.. задача такая: Деревни В тридесятом государстве есть N деревень. Некоторые пары деревень соединены дорогами. В целях...

Сладкая олимпиадная задача - C++
Дан торт который порезан на m*n равных кусков и вы хотите иметь точно один фрукт на каждом куске. Давайте обозначим f(m,n) количество...

Олимпиадная задача на перевертыши - C++
Жетоны По случаю организации сотого чемпионата по спортивной рыбалке, администратор рыбхоза Валерий Карпович решил устроить лотерею....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
02.12.2012, 15:52     Задача на дп (олимпиадная) #2
Покажите вашу реализацию, что-ли.
Mngame
Сообщений: n/a
02.12.2012, 16:56     Задача на дп (олимпиадная) #3
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
Сообщений: n/a
18.01.2013, 18:18     Задача на дп (олимпиадная) #4
если коротко-нужно составить бинарное дерево из логических переменных с проверкой условия(медиана больше номера необходимого шкафчика),где последние листья-это шкафчики,и "заполнять" ветку,когда шкафчик найден.
т.е. если первый и второй шкафчик заняты их узел тоже занят
т.о. когда первые 5000 шкафчиков заняты ты не перебираешь заново,а уже в самом начале дерева переходишь на правую ветку
если сделаю код-пришлю(сделаю на паскале)
Yandex
Объявления
18.01.2013, 18:18     Задача на дп (олимпиадная)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru