Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите задачку зарешать пж

Бульдозер Местный Ученик (95), закрыт 1 год назад
Лучший ответ
Двоечник Обыкновенный Высший разум (102292) 1 год назад
/* программа на языке Си */

#include <stdio.h>
#include <stdlib.h>

int main()
{
const char salut[6] = "21:00"; /* время начала салюта */
unsigned N, Count = 0;
scanf("%u",&N);
char ** T;
T = (char**) malloc(sizeof(char*) * N);
for(unsigned x = 0; x < N; x++)
T[x] = (char*) malloc(sizeof(char) * 6);

/* структура ввода времени: две цифры -- часы, потом двоеточие, потом две цифры -- минуты */
for(unsigned x = 0; x < N; x++)
{
scanf("%s",T[x]);

if(T[x][0] >= '0' && T[x][0] <= '9' && T[x][1] <= '9' && T[x][1] >= '0'
&& T[x][2] == ':' && T[x][3] >= '0' && T[x][3] <= '9'
&& T[x][4] >= '0' && T[x][4] <= '9')
{
if(T[x][0] < salut[0])
{
Count++;
}
else if(T[x][0] == salut[0])
{
if(T[x][1] < salut[1])
{
Count++;
}
else if(T[x][1] == salut[1])
{
if(T[x][3] < salut[3])
{
Count++;
}
else if(T[x][3] == salut[3])
{
if(T[x][4] <= salut[4])
{
Count++;
}
}
}
}
}
}

printf("%u\n",Count);

if(T == (char**) NULL)
{
exit(1);
}
else
{
for(unsigned x = 0; x < N; x++)
{
if(T[x] == (char*) NULL)
{
exit(1);
}
else
{
free(T[x]);
T[x] = (char*) NULL;
}
}
free(T);
T = (char**) NULL;
}
return 0;
}

/*
Если нужен язык С++ -- дождитесь, пока кто-то другой ответит.
Мне будет некогда переделывать.
*/
Остальные ответы
Виктор Мальков Мудрец (10309) 1 год назад
 #include  
#include

using namespace std;

int main() {
int n;
map points;
cin >> n;
for (int i = 0; i < n; i++) {
int l, r;
cin >> l >> r;
points[l] += 1;
points[r] -= 1;
}

int max = 0, current = 0;
for (const auto& time_delta : points) {
current += time_delta.second;
if (current > max) {
max = current;
}
}
cout << max;
return 0;
}
я си не знаю, мог что-то упустить
Виктор МальковМудрец (10309) 1 год назад
 #include  
#include

using namespace std;

int main() {
int n;
map points;
cin >> n;
for (int i = 0; i < n; i++) {
int l, r;
cin >> l >> r;
points[l] += 1;
points[r + 1] -= 1;
}

int max = 0, current = 0;
for (const auto& time_delta : points) {
current += time_delta.second;
if (current > max) {
max = current;
}
}
cout << max;
return 0;
}
в 14 строке исправил
т. к. в момент ухода человек ещё считается присутствующим
Сергей Гений (56299) Виктор Мальков, Думаю что вы поняли фразу "но при этом еще не уйдет" слишком буквально. Если же брать диапазоны включительно, то нужно отдельно две последовательности - одна плюсует, проходит подсчет, затем вторая минусует. Чтобы не было этого "r+1" который наделяет человека свойствами кота Шредингера.
Сергей Гений (56299) 1 год назад
 #include  
#include
using namespace std;

int main()
{
uint32_t N, view_salut_count{}, view_max_count{};
map seq; //точки входа и выхода зрителей
cin >> N;
while (N--)
{
uint32_t start, stop;
cin >> start >> stop;
seq[start]++; //начало диапазаона : точка дает +1 зритель
seq[stop]--; //конец диапазона : точка дает -1 зритель
}
for (auto& point : seq) //идем по всем точкам
{
view_salut_count += point.second; //в каждой точке количество зрителей уменьшается или увеличивается
if (view_max_count < view_salut_count) view_max_count = view_salut_count; //нахождение масксимума
}
cout << "Salute was viewed " << view_max_count << " persons";
}
Похожие вопросы