- •Ответы на задачи с4:
- •Var tMonth: array[1..12] of real;
- •I, month: integer;
- •Var count: array[1..26] of integer;
- •Var count:array[1..26] of integer;
- •I, k, cA, cAm, iMax:integer;
- •Var count:array['a'..'z']of integer;
- •Var Info: array[1..100] of record
- •I, k, p, n, c: integer;
- •Var Info: array[1..Lim] of record
- •I, k, n, mark, max: integer;
- •Var names: array[1..Lim] of string;
- •I, k, n, ball, mark, max, count: integer;
- •Var Info: array[1..Lim] of record
- •I, k, n, mark, max1, max2, max3: integer;
- •Var name: array[1..Lim] of string;
- •I, k, count, mark1, mark2, n: integer;
- •Var podr: array[1..100] of integer;
- •If not exist then begin
- •Var podr: array[1..100] of integer;
- •I, k, p, count, n: integer;
- •If not exist then begin
- •Var podr: array[0..99] of boolean;
- •I, k, p, count, n: integer;
- •Var podr: set of 0..99;
- •Var ballBest: array[1..2] of integer; { результат (баллы) }
- •Var ballBest: array[1..2] of integer;
- •I, j, k, ball: integer; { вспомогательные переменные }
- •Var Best: array[1..2] of record
- •I, j, k, ball: integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •I, j, k, price: integer;
- •Var Total: array[0..Max] of integer;
- •Var Count: array[0..Max,7..11] of integer;
- •I, j, class, ball, minBall, Sum: integer;
- •Var List: array[1..500] of string;
- •Var List: array[1..500] of string;
- •I, j, n, ball1, ball2, count: integer;
- •Var List: array[1..500] of string;
- •I, j, n, ball1, ball2, count: integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •I, j, k, price: integer;
- •Var count: array[1..26] of integer;
- •Var count: array['a'..'z'] of integer;
- •Inc(nOdd);
- •Var count: array['a'..'z'] of integer;
- •I, nOdd: integer;
- •Inc(nOdd);
- •Var Info: array[1..1000] of tInfo;
- •Var temp: tInfo;
- •Var Info: array[1..1000] of tInfo;
- •Var h, m, code0: integer;
- •Var Info: array[1..1000] of tInfo;
- •Var Info: array[1..1000] of tInfo;
- •Var h, m, code0: integer;
- •If c in ['a'..'z', 'a'..'z'] then ...
- •If c in['a'..'z','a'..'z'] then
- •Var Names: array[1..Max] of string;
- •Var count: array[1..Max] of integer;
- •Var nParties: integer;
- •Var Names: array[1..Max] of string;
- •Var Parties: array[1..Max] of tParty;
- •Var Parties: array[1..Max] of tParty;
- •Val(Copy(s,1,2), d, c);
- •Val(Copy(s,4,2), m, c);
- •Val(Copy(s,7,4), y, c);
- •Var s, Name, minName: string;
- •Val(Copy(s,1,2), d, c);
- •Val(Copy(s,4,2), m, c);
- •Val(Copy(s,7,4), y, c);
- •Var s, Name, specDate, minName, minDate: string;
- •Var name,name1,name2:string;
- •I, j, n, school, ball,
- •Var sum, count: array[1..99] of integer;
- •Var sum, count: array[1..99] of integer;
- •I, n, sch, ball, k, total: integer;
- •If s[I] in ['a'..'z','a'..'z'] then
- •If inside then begin
- •Var s: string;
- •Var word: string;
- •Var count:array[0..100] of integer;
- •I, n, sch, ball, m, s: integer;
- •Var c: char;
- •I, k, count: integer;
- •Var c, I: char;
- •Var c: char;
- •I, j, k: integer;
- •Var c:char;
- •I, j, k:integer;
- •Var num: array['0'..'9'] of integer;
- •I, min: integer;
- •Var c: char;
- •I, k, count: integer;
- •Var c, I: char;
- •Var c: char;
- •Var num: array['1'..'9'] of integer;
- •Var num: array['1'..'9'] of integer;
- •Val(Copy(s,1,2), d, I);
- •Var dm: array[1..12] of integer;
- •Val(Copy(s,1,p-1), c.No, k); { номер слева от пробела }
- •Var maxStip: array[1..5] of integer;
- •Var I, k, n: integer;
- •Var first: array[1..5] of integer;
- •Var I, n, kurs, stip: integer;
- •Var people: array[1..Max-1] of integer;
- •Var Delta: array[1..Max] of integer;
- •Var Delta: array[1..Max] of integer;
- •I, s1, s2, n, p, min: integer;
- •Var people: array[1..Max-1] of integer;
- •I, j, s1, s2, n, p, min: integer;
- •Var schMax, schCount: array[1..Max] of integer;
- •Var schMax, schCount: array[1..Max] of integer;
- •I, n, sch, ball, count: integer;
- •Var f: Text; { указатель на текстовый файл }
- •X1, x2: real; { корни уравнения }
- •I, r: integer; { вспомогательные переменные }
- •Val(Copy(s,1,I-1), c, r);
- •Var Info: array[1..Max] of tInfo;
- •Var Info: array[1..Max] of tInfo;
- •I, j, n, zNo: integer;
- •Var count: array[1..Max] of integer;
- •Var count: array[1..Max] of integer;
- •I, j, nMin, n, zNo: integer;
- •Var Info: array[1..Max] of tInfo;
- •I, j, n, k: integer;
- •Var X, count, c, c0, max, max2, max3, max6: integer;
- •Var X, Xprev, n, l, lMax: integer;
- •Var X, Xprev, Xstart, n, lMax: integer;
- •Var k: char;
- •Var I, sumFf: integer;
- •Var I, count1, count2, sumFf: integer;
- •Var I, j, count1, count2, sumFf: integer;
- •Var words: array[1..27] of string;
- •Var sum, p, I, j, n, number: integer;
- •Var j: integer;
- •Var sum, p, I, V, n,number: integer;
- •Var j: integer;
- •Var words: array[1..99] of string;
- •Var sum, I, j, n: integer;
- •Var count: array['a'..'z'] of integer;
- •Var s: string;
- •Var letters: array['a'..'z'] of char;
- •Var count: array['a'..'z'] of integer;
- •I: integer;
- •Var count: array[1..26] of integer;
- •I, k: integer;
- •Var count: array[1..26] of integer;
- •I, k: integer;
- •Var w: array[1..26] of structW;
- •I, k: integer;
- •Var count: array[1..26] of integer;
- •I, k, max: integer;
- •97 Http://kpolyakov.Narod.Ru
Var Delta: array[1..Max] of integer;
Тогда, если очередной пассажир вошел на станции с номером s1 и вышел на станции s2, нужно увеличить на 1 значение Delta[s1] и уменьшить на 1 значение Delta[s2]:
Delta[s1]:= Delta[s1] + 1;
Delta[s2]:= Delta[s2] - 1
При чтении фамилию и имя пассажира мы просто пропускаем – они нас не интересуют. Полный цикл чтения данных выглядит так:
for i:= 1 to P do begin
repeat read(c) until c = ' ';
repeat read(c) until c = ' ';
readln(s1, s2);
Delta[s1] := Delta[s1] + 1;
Delta[s2] := Delta[s2] - 1
end;
Теперь можно заполнить массив people. На первом перегоне в поезде было Delta[1] человек, а на каждой следующей станции (с номером i) количество увеличивалось в сравнении с предыдущим на Delta[i]:
people[1] := Delta[1];
for i:=2 to N-1 do
people[i]:= people[i-1] + Delta[i];
Теперь остается найти минимум:
min := P;
for i:=1 to N-1 do
if people[i] < min then
min := people[i];
и вывести на экран перегоны, где количество пассажиров равно минимальному:
for i:=1 to N-1 do
if people[i] = min then
writeln(i, '-', i+1)
Вот полная программа:
const MAX = 10;
Var Delta: array[1..Max] of integer;
people: array[1..MAX-1] of integer;
I, s1, s2, n, p, min: integer;
c: char;
begin
readln(N, P);
for i:=1 to N do Delta[i] := 0;
for i:= 1 to P do begin
repeat read(c) until c = ' ';
repeat read(c) until c = ' ';
readln(s1, s2);
Delta[s1] := Delta[s1] + 1;
Delta[s2] := Delta[s2] - 1
end;
people[1] := Delta[1];
for i:=2 to N-1 do
people[i]:= people[i-1] + Delta[i];
min := P;
for i:=1 to N-1 do
if people[i] < min then
min := people[i];
for i:=1 to N-1 do
if people[i] = min then
writeln(i, '-', i+1)
end.
Возможен и другой вариант, когда массив Delta не нужен: прочитав s1 и s2, мы сразу добавляем по 1 человеку на все перегоны между указанными станциями. Цикл ввода приобретает такой вид:
for i:= 1 to P do begin
repeat read(c) until c = ' ';
repeat read(c) until c = ' ';
readln(s1, s2);
for j:=s1 to s2-1 do
people[j] := people[j] + 1;
end;
И вот полная программа:
const MAX = 10;
Var people: array[1..Max-1] of integer;
I, j, s1, s2, n, p, min: integer;
c: char;
begin
readln(N, P);
for i:=1 to N do Delta[i] := 0;
for i:= 1 to P do begin
repeat read(c) until c = ' ';
repeat read(c) until c = ' ';
readln(s1, s2);
for j:=s1 to s2-1 do
people[j] := people[j] + 1;
end;
min := P;
for i:=1 to N-1 do
if people[i] < min then
min := people[i];
for i:=1 to N-1 do
if people[i] = min then
writeln(i, '-', i+1)
end.
Оба решения имеют небольшие недостатки. В первом используется дополнительный массив Delta (расход памяти), но все циклы простые, не вложенные. Поэтому алгоритм имеет линейную сложность – количество операций при больших N и P возрастает почти по линейной зависимости относительно обеих величин.
Во втором решении мы сэкономили память (нет массива Delta), однако при вводе данных получили вложенный цикл, что можно считать несколько неэффективным по скорости выполнения.
Какой вариант лучше? Как всегда, решение – это компромисс между быстродействием и расходуемой памятью. Есть надежда, что и в том, и в другом случае эксперт не будет снижать балл за неэффективность.
Нужно завести массивы, в одном из которых будем хранить максимальные баллы по каждой школе, а в другом – число учеников, получивших этот максимальный балл:
const MAX = 99;