Решение олимпиадных задач

advertisement
Решение
олимпиадных
задач
Учитель информатики МБОУ«СОШ № 23
с углубленным изучением отдельных предметов»
Энгельсского муниципального района Саратовской
области Пуликова Светлана Алексеевна
Незванные гости
За день к школьнику Васе пришло N незванных гостей. Вася
записал время прихода и ухода каждого из гостей. По этим
данным определите, какое максимальное число гостей
одновременно находилось дома у Васи.
Входные данные
• Первая строка входных данных содержит натуральное число
N – количество пришедших гостей. 0<N≤100000. Далее идет N
строчек, каждая из которых содержит два неотрицательных
целых числа: время прихода и ухода каждого гостя. Время
прихода каждого гостя не превосходит его время ухода и оба
времени не превосходят 100000. Считается, что гость
находится дома у Васи с момента прихода до момента ухода
включительно.
Результат
• Программа должна вывести единственное число –
максимальное количество гостей, которые одновременно
находились дома у Васи.
Пример
•
Вход 4 1 4 3 5 0 2 4 5 Выход 3
пример
время 0
гости
1
2
3
4
5
1-й гость
время 0
1
2
3
4
гости
1
1
1
1
5
2-й гость
время 0
1
2
3
4
5
гости
1
1
2
2
1
3-й гость
время 0
1
2
3
4
5
гости 1
2
2
2
2
1
4-й гость
время 0
1
2
3
4
5
гости
1
1
2
3
2
Результат
время 0
1
2
3
4
5
гости
1
1
2
3
2
Program z3;
Const c=15000;
Var s:array [0..c] of longint;
n,j,i,t1,t2,Max:integer;
Begin
Assign (input,'input.txt');
Assign (output,'output.txt');
Reset (input);
Rewrite (output);
Readln (n);
For i:=1 to c do
s[i]:=0;
For i:=1 to n do begin
Readln (t1,t2);
For j:=t1 to t2 do s[j]:=s[j]+1;
End;
Max:=0;
For i:=1 to c do
If s[i]>Max then Max:=s[i];
Write (Max);
Close (input);
Close (output);
End.
0 1 2 …
100000
0 1 2 …
1
100000
2
3
4
5
6
7
0 1 2 …
1
100000
2
15000 элементов
3
4
5
6
7
0 1 2 …
1
100000
2
3
4
5
6
7
15000 элементов
0 1 2 …
15000
0
1
2
…
100000
2
1
3
4
5
6
7
Максимум M[1]
0 1 2 …
15000
0
1
2
…
1
100000
2
3
4
5
6
7
Максимум M[2]
0 1 2 …
15000
0 1 2 …
1
100000
2
3
4
5
6
7
Максимум M[3]
0 1 2 …
15000
0
1
2
…
1
100000
2
3
4
5
6
7
Максимум M[4]
0 1 2 …
15000
0
1
2
…
1
100000
2
3
4
5
6
7
Максимум M[5]
0 1 2 …
15000
0
1
2
…
1
100000
2
3
4
5
6
7
Максимум M[6]
0 1 2 …
15000
0 1 2 …
1
100000
2
3
4
5
6
7
Максимум M[7]
0 1 2 …
15000
Program z3f;
Const c=15000;
Var s:array [0..c] of longint;
m:array[1..7]of longint;
n,j,i,t1,t2,Max,t1f,t2f:longint;
pf:boolean;
f1,f2:text;
k:integer;
Begin
Assign (input,'input.txt');
Assign (output,'output.txt');
Assign (f1,'f1.txt');
Assign (f2,'f2.txt');
Reset (input);
Rewrite (output);
Rewrite (f1);
Readln (n);
pf:=false;
For i:=1 to c do
s[i]:=0;
For i:=1 to n do begin
Readln (t1,t2);
If t1>c then begin pf:=true; t1f:=t1-c;
t2f:=t2-c;writeln(f1,t1f,' ',t2f) end
else begin
if t2>c then begin
pf:=true;t1f:=1; t2f:=t2-c;t2:=c;
writeln(f1,t1f,' ',t2f);
end;
For j:=t1 to t2 do
s[j]:=s[j]+1;
End;
end;
Max:=0;
For i:=1 to c do
If s[i]>Max then Max:=s[i];
m[1]:=max;
close(f1);
for k:=1 to 6 do begin
reset(f1);
rewrite(f2);
pf:=false;
for i:= 1 to c do s[i]:=0;
While not eof(f1) Do begin
Readln (f1,t1,t2);
If t1>c then begin pf:=true; t1f:=t1-c;
t2f:=t2-c;writeln(f2,t1f,' ',t2f) end
else begin
if t2>c then begin
pf:=true;t1f:=1;
t2f:=t2-c;t2:=c;
writeln(f2,t1f,' ',t2f);
end;
For j:=t1 to t2 do
s[j]:=s[j]+1;
End;
end;
Max:=0;
For i:=1 to c do
If s[i]>Max then Max:=s[i];
m[k+1]:=max;
close(f1);
close(f2);
reset(f2);
rewrite(f1);
While not eof(f2) do begin
readln(f2,t1f,t2f);
writeln(f1,t1f,' ',t2f);
end;
close(f2);
close(f1);
end;
max:=m[1];
for i:=1 to 7 do
if m[i]>max then max:=m[i];
Write (Max);
Close (input);
Close (output);
End.
Спасибо за внимание.
Download