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
var a: array[0..100,0..100] of integer;
n, m, i, j, max, col: integer;
begin
read(n);
read(m);
for i: =0 to n-1 do
for j: =0 to m-1 do
begin
read(a[i,j]);
if max< a[i,j] then max: =a[i,j];
end;
for i: =0 to n-1 do
for j: =0 to m-1 do
if max=a[i,j] then begin inc(col); break; end;
writeln(col);
for i: =0 to n-1 do
for j: =0 to m-1 do
if max=a[i,j] then begin write(i, ' '); break; end;
end.
Объяснение:
Двоичный поиск эффективно определяет положение искомого элемента (или его отсутствие) в упорядоченном наборе.
Это один из базовых и важных алгоритмов.
Если склады от №1 до №15 заполнены, то:
- когда плотник открывает склад №16, он оказывается пуст (1-ая открытая дверь);
- тогда плотник решает искать между №1 и №15, открывает склад №8, он оказывается заполнен (2-ая открытая дверь);
- теперь он ищет между №9 и №15, открывает склад №12 — он заполнен (3-ья открытая дверь);
- далее он ищет между №13 и №15, открывает склад №14 - он заполнен (4-ая открытая дверь);
- наконец он открывает последний склад № 15 (5-ая дверь).
Правильный ответ: 5