Тема 26. Программирование - Обработка целочисленной информации с использованием сортировки
26.04 Прочие прототипы
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование - обработка целочисленной информации с использованием сортировки
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#56688

У Креветкоеда большая коллекция креветок разных размеров. Каждая креветка имеет размер равный целому числу от       1  до N  (не более 2 ⋅106  ) включительно. У него есть Ai  (каждое не более 103  ) креветок размера i  . Две креветки могут образовать пару, если абсолютное значение разности их размеров составляет не более 1  . Креветкоед хочет создать максимальное количество пар из своих креветок при условии, что ни одна креветка не должна использоваться в нескольких парах. Найдите максимальное количество пар, которые он может создать и съесть.

В первой строке файла 26.txt вам дано число N  , а в следующих N  строках того же файла N  целых чисел Ai.

Вложения к задаче
Показать ответ и решение

Во-первых, предположим, что не существует такого i  , чтобы Ai = 0  . В этом случае мы можем доказать, что ответ всегда S∕∕2  , где S  — общее количество креветок.

Доказательство заключается в следующем. Очевидно, что мы не можем сделать больше, чем S∕∕2  пары. С другой стороны, мы можем в явном виде построить S∕∕2  пары следующим алгоритмом: Пусть x1,...,xS  — все креветки, отсортированные в порядке неубывания. Тогда для каждого i  : xi+1 − xi ≤ 1  (в противном случае нет креветки с целым числом xi + 1  , что является противоречием). Таким образом, мы можем построить S∕∕2  пары (x1,x2),(x3,x4),...  . Таким образом, мы можем сделать S∕∕2  пары.

Когда Ai = 0  для некоторого i  , вы не можете использовать карты с целым числом i  , поэтому вы можете разделить последовательность на i  , и для каждой части вы можете решить задачу независимо (ответ — сумма этих независимых задач).

На самом деле можно даже не делать сплит по 0  . Достаточно лишь посмотреть при рассмотрении креветок размера        i  , не осталась ли у вас ровно 1  креветка размера i− 1  . Следовательно, вы можете разделить последовательность  Ai  , по 0  , и для каждой части вычислить половину (с округлением дробной части в меньшую сторону) суммы, и ответом будет сумма этих чисел. Асимптотика решения O (N )  .

Решение на C++

void solve(){
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; ++i){
        cin >> a[i];
    }
    long long ans = 0;
    ans += a[0] / 2; a[0] -= 2 * ans;
    for(int i = 1; i < n; ++i){
        if(a[i - 1] > 0){
            if(a[i] > 0){
                --a[i];
                ++ans;
            }
        }
        ans += a[i] / 2;
        a[i] -= a[i] / 2 * 2;
    }
    cout << ans << ’\n’;
}

 

Решение на Python

f = open("26.txt")
n = int(f.readline())
a = [int(f.readline()) for _ in range(n)]
ans = 0
for i in range(n - 1):
    if a[i] >= a[i + 1]:
        ans += a[i + 1]
        a[i] -= a[i + 1]
        a[i + 1] = 0
        ans += a[i] // 2
        a[i] = a[i] % 2
    else:
        ans += a[i]
        a[i + 1] -= a[i]
        a[i] = 0
        ans += a[i + 1] // 2
        a[i + 1] = a[i + 1] % 2
print(ans)

Ответ: 24995271

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное обучение
в Школково

Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!