Содержание верного ответа
(допускаются иные формулировки ответа, не искажающие его смысла)
Задание Б (решение для задания А приведено ниже, см. программу ). Чтобы
произведение было чётным, хотя бы один сомножитель должен быть чётным,
поэтому при поиске подходящих произведений чётные показания прибора
можно рассматривать в паре с любыми другими, а нечётные – только
с чётными. Для каждого показания с номером начиная с рассмотрим все
допустимые по условиям задачи пары, в которых данное показание получено
вторым. Минимальное произведение из всех этих пар будет получено, если
первым в паре будет взято минимальное подходящее показание среди всех,
полученных от начала приёма и до показания с номером – Если
очередное показание чётное, минимальное среди предыдущих может быть
любым, если нечётное – только чётным. Для получения эффективного по времени решения нужно по мере ввода
данных помнить абсолютное минимальное и минимальное чётное показание
на каждый момент времени, каждое вновь полученное показание умножать
на соответствующий ему минимум, имевшийся на элементов ранее,
и выбрать минимальное из всех таких произведений. Поскольку каждое текущее минимальное показание используется после
ввода ещё элементов и после этого становится ненужным, достаточно
хранить только последних минимумов. Для этого можно использовать
массив из элементов и циклически заполнять его по мере ввода данных.
Размер этого массива не зависит от общего количества введённых показаний,
поэтому такое решение будет эффективным не только по времени, но и по
памяти. Чтобы хранить абсолютный и чётный минимумы, нужно
использовать два таких массива. Ниже приводится пример такой программы, написанной на алгоритмическом
языке.
Программа 1. Пример правильной программы на алгоритмическом языке. Программа эффективна по времени и по памяти
алг
нач
цел s = 6 | требуемое расстояние между показаниями
цел amax = 1001 | больше максимально возможного показания
цел N
ввод N
цел a | очередное показание прибора
целтаб мини[0:s-1] | текущие минимумы последних s элементов
целтаб миничет[0:s-1] | чётные минимумы последних s элементов
цел i
| вводим первые s показаний, фиксируем минимумы
цел ма; ма := amax | минимальное показание
цел мчет; мчет := amax | минимальное чётное показание
нц для i от 1 до s
ввод а
ма := imin(ма, a)
если mod(a,2) = 0 то мчет := imin(мчет,a) все
мини[mod(i, s)] := ма
миничет[mod(i, s)] := мчет
кц
цел мп = amax*amax | минимальное значение произведения
цел п
нц для i от s+1 до N
ввод а
если mod(a,2)=0
то п := a * мини[mod(i, s)]
иначе если мчет < amax
то п := a * миничет[mod(i, s)]
иначе п := amax*amax;
все
все
мп := imin(мп, п)
ма := imin(ма, a)
если mod(a,2) = 0 то мчет := imin(мчет,a) все
мини[mod(i, s)] := ма
миничет[mod(i, s)] := мчет
кц
если мп = amax*amax то мп:=-1 все
вывод мп
кон
Возможны и другие реализации. Например, вместо циклического заполнения
массива можно каждый раз сдвигать его элементы. В приведённом ниже
примере хранятся и сдвигаются не минимумы, а исходные значения.
Это требует чуть меньше памяти (достаточно одного массива вместо двух),
но по времени решение со сдвигами менее эффективно, чем с циклическим
заполнением. Однако время работы остаётся пропорциональным поэтому
максимальная оценка за такое решение тоже составляет балла. Программа 2. Пример правильной программы на языке Паскаль. Программа использует сдвиги, но эффективна по времени и по памяти
const s = 6;
amax = 1001;
var
N: integer;
a: array[1..s] of integer;
a_: integer;
ma: integer;
me: integer;
mp: integer;
p: integer;
i, j: integer;
begin
readln(N);
for i:=1 to s do readln(a[i]);
ma := amax; me := amax;
mp :=amax*amax;
for i := s + 1 to N do begin
readln(a_);
if a[1] < ma then ma := a[1];
if (a[1] mod 2 = 0) and (a[1] < me) then me := a[1];
if a_ mod 2 = 0 then p := a_ * ma
else if me < amax then p := a_ * me
else p := amax* amax;
if (p < mp) then mp := p;
for j := 1 to s - 1 do
a[j] := a[j + 1];
a[s] := a_
end;
if mp = amax*amax then mp:=-1;
writeln(mp)
end.
Если вместо небольшого массива фиксированного размера (циклического
или со сдвигами) хранятся все исходные данные (или все текущие
минимумы), программа сохраняет эффективность по времени, но становится
неэффективной по памяти, так как требуемая память растёт
пропорционально Ниже приводится пример такой программы на языке
Паскаль. Подобные (и аналогичные по сути) программы оцениваются
не выше баллов. Программа 3. Пример правильной программы на языке Паскаль. Программа эффективна по времени, но неэффективна по памяти
const s = 6;
amax = 1001;
var
N, p, i: integer;
a: array[1..10000] of integer;
ma: integer;
me: integer;
mp: integer;
begin
readln(N);
for i:=1 to N do readln(a[i]);
ma := amax;
me := amax;
mp := amax*amax;
for i := s + 1 to N do
begin
if a[i-s] < ma then ma := a[i-s];
if (a[i-s] mod 2 = 0) and (a[i-s] < me) then
me := a[i-s];
if a[i] mod 2 = 0 then p := a[i] * ma
else if me < amax then p := a[i] * me
else p := amax * amax;
if (p < mp) then mp := p
end;
if mp = amax*amax then mp := -1;
writeln(mp)
end.
Возможно также переборное решение, в котором находятся произведения
всех возможных пар и из них выбирается минимальное. Ниже (см.
программу ) приведён пример подобного решения. Это (и аналогичные ему)
решение неэффективно ни по времени, ни по памяти. Оно является решением
задания А, но не является решением задания Б. Оценка за такое решение –
балла. Программа 4. Пример правильной программы на языке Паскаль. Программа неэффективна ни по времени, ни по памяти
const s = 6;
var
N: integer;
a: array[1..10000] of integer;
mp: integer;
i, j: integer;
begin
readln(N);
for i:=1 to N do
readln(a[i]);
mp := 1000 * 1000 + 1;
for i := 1 to N-s do begin
for j := i+s to N do begin
if (a[i]*a[j] mod 2 = 0) and (a[i]*a[j] < mp)
then mp := a[i]*a[j]
end;
end;
if mp = 1000 * 1000 + 1 then mp := -1;
writeln(mp)
end.
Указания по оцениванию
Предварительные замечания.
- В задаче есть два задания (А и Б). Соответственно, ученик может представить две программы. В каждой из программ должно быть указано, решением какого из заданий она является. Если в работе представлена одна программа, то в ней также должно быть указано, решением какого из заданий она является.
- Если ученик не указал, к какому заданию относится программа, или можно предположить, что ученик ошибся в идентификации программ, необходимо следовать приведённым ниже инструкциям.
Случай 2.1. Ученик представил только одну программу.
Следует рассматривать программу как решение задания Б
и оценивать её по соответствующим критериям.
Случай 2.2. Ученик представил две программы, но указание
задания есть только для одной из программ.
Следует рассматривать вторую программу как ответ
на оставшееся задание.
Случай 2.3. Ученик представил две программы; ни для одной
из них задание не указано, или в обоих решениях указано одно и то
же задание.
Следует первую (по порядку в представленных учеником
материалах) программу рассматривать как ответ на задание А,
а вторую – как ответ на задание Б.
Случай 2.4. Ученик представил более двух программ.
Следует рассматривать только две последние программы
и соотносить их с заданиями по правилам 2.1–2.3.
Случай 2.5. Решение, представленное в качестве решения
задания А, по критериям для задания Б может быть оценено в или
балла. При этом решение, представленное в качестве решения
задания Б, получило меньшую оценку. Следует считать, что ученик перепутал обозначения заданий
и оценивать решение, представленное как решение задания А,
по критериям задания Б.
НАПОМИНАЕМ! Итоговый балл за задачу – это больший
из баллов, полученных учеником за каждое из двух представленных
решений.
Пояснения для проверяющих.
- Задание Б является усложнением задания А. Если в качестве решения задания Б представлено решение задания А, то согласно приведённым ниже критериям его оценка будет такой же, как если бы это решение было представлено в качестве решения задания А.
- Два задания (и, соответственно, возможность для экзаменуемого представить две программы) дают ученику возможность (при его желании) сначала написать менее сложное и менее эффективное решение (задание А), которое даёт ему право получить балла, а затем приступить к поиску более эффективного решения.
- Приведённые в п. 2.1–2.5 правила имеют целью избежать снижения оценки из-за того, что ученик перепутал обозначения заданий
Порядок назначения третьего эксперта
В соответствии с Порядком проведения государственной итоговой
аттестации по образовательным программам среднего общего образования
(приказ Минобрнауки России от зарегистрирован
Минюстом России ) « По результатам первой и второй проверок эксперты независимо
друг от друга выставляют баллы за каждый ответ на задания
экзаменационной работы ЕГЭ с развёрнутым ответом...
В случае существенного расхождения в баллах, выставленных
двумя экспертами, назначается третья проверка. Существенное расхождение баллах определено в критериях оценивания по соответствующему
учебному предмету.
Эксперту, осуществляющему третью проверку, предоставляется
информация о баллах, выставленных экспертами, ранее проверявшими
экзаменационную работу».
Если расхождение составляет и более балла за выполнение любого из
заданий, то третий эксперт проверяет ответы только на те задания, которые
вызвали столь существенное расхождение.