
- •Ответы на задачи с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
- •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..Max] of string;
- •Var name: array[1..Lim] of string;
- •I, k, count, mark1, mark2, n: integer;
- •Var podr: array[1..100] of integer;
- •Var podr: array[0..99] of boolean;
- •I, k, p, count, n: integer;
- •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, ball3, count: integer;
- •Var List: array[1..500] of string;
- •I, j, n, ball1, ball2, ball3, 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 I, oddCount:integer;
- •Inc(count[c]); { увеличиваем счётчик }
- •Inc(oddCount);
- •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
- •If s[I] in ['a'..'z','a'..'z'] then begin
- •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 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 digits, s: string;
- •I, j, l: integer;
- •If s[I] in ['0'..'9'] then begin
- •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);
- •Val(Copy(s,4,2), m, I);
- •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 schCount:array[1..Max] of integer;
- •Inc(schCount[sch]);
- •Var f: Text; { указатель на текстовый файл }
- •X1, x2: real; { корни уравнения }
- •I, r: integer; { вспомогательные переменные }
- •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;
- •Var mas: array['a'..'z'] of integer;
- •Var n, I, V, pMin, min, min2, max, max2: integer;
- •Var n, I, V, v1, ch1, ch2, nch1, nch2: integer;
- •Var n, I, V, ch1, ch2, nch1, nch2: integer;
- •Var fio: array[1..Max] of string;
- •Var I, k, n, nFio: integer;
- •Var I: integer;
- •Var fio: array[1..Max] of string;
- •I, k, n, nFio, maxCount: integer;
- •Var I: integer;
- •Var fio: array[1..Max] of string;
- •I, j, k, p, n, nFio: integer;
- •Var I: integer;
- •Var pass: array [1..Maxcells] of integer;
- •If ячейка найдена then begin
- •Var cellNo: integer;
- •Inc(count); { увеличить счётчик }
- •I, p, cellNo, count: integer;
- •Inc(count);
- •Inc(cellNo);
- •Var I, n, X, y: integer;
- •XMin, xMax, yMax: integer;
- •Var I, n, X, y: integer;
- •XMin1, xMax1, yMax1: integer;
- •XMin2, xMax2, yMax2: integer;
- •Var Info: array[1..3] of tInfo;
- •Var res0: integer;
- •Var Info: array[1..3] of tInfo;
- •I, n: integer;
- •Var name:array[1..3] of string;
- •Var I, j, k, posName, n:longint;
- •Inc(posName);
- •Var count, r, xR, yR: array[1..4] of integer;
- •Var count, r, xR, yR: array[1..4] of integer;
- •I, k, n, X, y: integer;
- •Var f: Text;
- •Var max: double;
- •IMax: integer;
- •Var small: array[0..9] of integer;
- •If not isSmall then write(I, ' ');
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;