9062. Поедание булочек
Кратос и Атрей решили поесть булочек.
Чтобы разнообразить процесс, Кратос приготовил 2k булочек и предложил
устроить соревнование по скоростному поеданию.
И Кратос и Атрей будут есть по k булочек.
Все закончилось также быстро, как и началось. Фрейя тайно наблюдала за этим состязанием
и заметила несколько особенностей:
·
Оба участника состязания съели ровно по
k булочек.
·
За одно действие Кратос либо Атрей съедали либо одну, либо две булочки.
·
Каждый раз, когда кто-то из них делал действие, он записывал сколько булочек
съедал.
После того, как Кратос с Атреем
ушли, Фрейя нашла их “протокол”. К сожалению, для каждого действия записано, сколько булочек было съедено,
но не записано, кто именно их ел.
Фрейя помнит, что Кратос в
некоторый момент состязания выглядел безоговорочным лидером, так как съел булочек
сильно больше чем Атрей. Она просит Вас по данному протоколу определить, какой
наибольший отрыв мог быть у Кратоса на протяжении состязания.
Вход. В первой строке заданы два целых
числа n и k (2 ≤ n ≤ 105, 1 ≤ k ≤ n) – число записей в протоколе и число булочек, съеденных каждым из участников.
Во второй строке заданы n чисел ai (1 ≤ ai ≤ 2) – данные протокола. Гарантируется, что протокол корректен: можно разделить ai на два множества так, чтобы сумма
чисел в обоих множествах была равна k.
Выход. Выведите одно целое число –
наибольший отрыв Кратоса на протяжении состязания.
Пример
входа |
Пример
выхода |
3 2 1 2 1 |
1 |
математика
Ответ равен k, если только
сначала Кратос съел все свои k булочек, после чего все свои булочки съел
Атрей. Если существует частичная сумма, равная k, то имеет место этот
случай и ответ равен k.
Иначе всегда можно организовать
такое поедание булочек, при котором ответ равен k – 1. В этом случае
существует частичная сумма, равная k – 1, и этих всех начальных k
– 1 булочек должен съесть Кратос. Именно в этот момент отрыв Кратоса составит k
– 1. Дальше по протоколу следует число 2, две булочки съедает Атрей. И в
дальнейшем отрыв Кратоса от Атрея уже никак не сможет быть больше k – 2.
Читаем
входные данные.
scanf("%d %d", &n, &k);
В
переменной s вычисляем частичные суммы.
s = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &val);
s += val;
Если
частичная сумма в некоторый момент равна k, то ответ на задачу k.
if (s == k)
{
printf("%d\n", k);
return 0;
}
}
Иначе
выводим ответ k – 1, который всегда можно достигнуть.
printf("%d\n", k - 1);