Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337

Задача Прием у директора

10.05.2017, 20:08. Показов 6066. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые пользователи этого замечательного форума!

Написал несложную программу на работу со структурой (E-olymp №13), но в последнем тесте - неправильный ответ. Очень надеюсь на вашу помощь! Помогите, пожалуйста, найти ошибку.

Условие задачи:

Прием у директора

Секретарь общеобразовательного учреждения Марта Георгиевна ежедневно начинала свой рабочий день с претензий к директору:

Вот Вы, Иван Иванович, заместителю по учебной части программу для составления расписания уже приобрели. А что мне делать? Ведь мне нужно согласно Ваших требований составить график приема посетителей, а программу для планирования работы администрации Вы мне не приобрели...
Попробуйте помочь секретарю в ее роботе. Для этого вам нужно организовать прием посетителей на основании пожеланий, сделанных ими в соответствующей книге у секретаря.

Прием двух посетителей одновременно запрещен. В момент завершения приема одного посетителя может начаться прием другого - они встретились в дверях кабинета.

Входные данные:

В первой строке число n (n ≤ 1000) - количество посетителей, записавшихся на прием. В последующих n строках по два числа T1i - время начала встречи с директором и через пробел T2i - время ее завершения в формате hh:mm. Известно, что ремя задано в течении одних суток, все T2i ≥ T1i.

Выходные данные:

Максимальное количество посетителей, которое сможет принять директор учреждения на протяжении рабочего дня.

Входные данные #1:
4
09:10 13:05
14:25 14:30
14:20 15:15
15:00 17:00

Выходные данные #1:
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
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int TimeIntoMin(string s) //Переводим время в часах и минутах в минуты
{
    return atoi(s.substr(0, 2).c_str()) * 60 + atoi(s.substr(3, 2).c_str());
}
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int N, k;
    fin >> N; //Количество посетителей, записавшихся на прием
    struct Time
    {
        string begin;
        string end;
    } A[N];
    int* B = new int[N];
    int* E = new int[N];
    for (int i = 0; i < N; i++)
    {
        fin >> A[i].begin >> A[i].end; //Считываем время начала и конца приема в структуру
    }
    sort(A, A + N, [](const Time& a, const Time& b) //Сортируем структуру по времени начала приема
        {
            return a.begin < b.begin;
        });
    for (int i = 0; i < N; i++)
    {
        B[i] = TimeIntoMin(A[i].begin); //Массив полных минут начала приема
        E[i] = TimeIntoMin(A[i].end); //Массив полных минут конца приема
    }
    k = 0;
    for (int i = 0; i < N - 1; i++)
    {
        if (B[i+1] >= E[i]) //Условие состоявшегося приема (интервалы конца и начала приема отсортированы по началу приема)
            k++;
    }
    fout << ++k << endl;
    fin.close();
    fout.close();
    delete[] B;
    delete[] E;
    system("pause");
    return 0;
}
Добавлено через 26 минут
Может быть, я не учитываю 00:00. Это время при сортировке в начало (а не конец) списка уходит.

Добавлено через 41 минуту
Пробовал сдвигать массивы на B[N] и E[N] на один элемент влево (чтобы перенести 00:00 в конец) и добавлял в этом случае к счетчику единицу. Все равно в последнем тесте - неправильный ответ. И N = 0 также учитывал...В чем может быть ошибка? Вот мой последний код:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int TimeIntoMin(string s) //Переводим время в часах и минутах в минуты
{
    return atoi(s.substr(0, 2).c_str()) * 60 + atoi(s.substr(3, 2).c_str());
}
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int N, k, x, y;
    fin >> N; //Количество посетителей, записавшихся на прием
    struct Time
    {
        string begin;
        string end;
    } A[N];
    int* B = new int[N];
    int* E = new int[N];
    for (int i = 0; i < N; i++)
    {
        fin >> A[i].begin >> A[i].end; //Считываем время начала и конца приема в структуру
    }
    sort(A, A + N, [](const Time& a, const Time& b) //Сортируем структуру по времени начала приема
        {
            return a.begin < b.begin;
        });
    for (int i = 0; i < N; i++)
    {
        B[i] = TimeIntoMin(A[i].begin); //Массив полных минут начала приема
        E[i] = TimeIntoMin(A[i].end); //Массив полных минут конца приема
        //cout << B[i] << " " << E[i] << endl;
    }
    k = 0;
    if (B[0] == 0)
    {
        x = B[0];
        y = E[0];
        for (int i = 0; i < N - 1; i++) //Сдвигаем элементы влево и увеличиваем счетчик на единицу (если присутствует 00:00)
        {                                 
            B[i] = B[i+1];
            E[i] = E[i+1];
        }
        B[N-1] = x;
        E[N-1] = y;
        k++;
    }
    for (int i = 0; i < N - 1; i++)
    {
        if (B[i+1] >= E[i]) //Условие состоявшегося приема (интервалы конца и начала приема
            //отсортированы по началу приема)
            k++;
    }
    if (N == 0)
        fout << 0 << endl;
    else
        fout << ++k << endl;
    fin.close();
    fout.close();
    delete[] B;
    delete[] E;
    system("pause");
    return 0;
}
Добавлено через 38 минут
Еще не рассматривал такой случай.
Вот часть неправильно отсортированной структуры:

00:01 17:00
00:01 14:00
00:01 15:00
00:01 17:05

16:00 16:15 - в этом случае важно какой из четырех интервалов сверху ближе находится к этому времени. Если 17:00 или 17:05 - счетчик не увеличивается. А если 14:00 или 15:00 то увеличивается. Кажется дело в этом. Попробую исправить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2017, 20:08
Ответы с готовыми решениями:

Асинхронные сокеты: Как организовать разделение на прием сообщений и прием файлов
Изучив синхронные сокеты, перешел к изучению асинхронных. Столкнулся вот с чем, как, используя асинхронные сокеты, сделать на стороне...

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

Директора школы судили за XP
По данным одного из моих знакомых работающих в обасти новостей: Директора школы судили за пиратские XP установленные на все школьные...

20
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
14.05.2017, 15:25  [ТС]
Студворк — интернет-сервис помощи студентам
GoldenId, Я благодарю вас за 11 и 12 пост - это все, что я не учел в своей первой программе. Вообщем, нужно было пробегать по всем j для каждого i, а я этого в своем 1 посте не учел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2017, 15:25

Формирование отчета, два директора
Добрый день! Имеется база данных по Компаниям. С помощью запросов и отчета формирую Карточку компании, где собраны все данные по...

Какой монитор у вашего директора?
Требуется создать сайт, ориентированный исключительно на директоров и их заместителей. При этом в ТЗ сказано, что он должен быть...

Сколькими способами можно выбрать директора
Здравствуйте . Сколькими способами можно выбрать директора, его заместителя и инженера из 18 человек

Удаленная работа для коммерческого директора
Корпорация специализируется и подготавливает менеджеров высшего звена для следующих web-бизнес направлений: 1. Финансовые услуги 2....

СРОЧНО! как замучить директора школы??
СРОЧНО! как замучить директора школы?? :D нужно!!!


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru