Редакция для Чётные и нечётные
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
1. Идея
Нужно пройти по всем кодам посылок и для каждого определить его чётность:
- если число делится на 2 без остатка, увеличиваем количество посылок на чётном маршруте;
- иначе увеличиваем количество посылок на нечётном маршруте.
В конце остаётся вывести два счётчика.
2. Наблюдения
- Число является чётным, если
x % 2 == 0. - Иначе число нечётное.
- Неважно, положительное число, отрицательное или ноль:
0— чётное;- отрицательные числа тоже корректно проверяются по остатку от деления на 2.
- Достаточно одного прохода по массиву.
3. Алгоритм
- Считать число
n. - Завести два счётчика:
even_count— количество чётных чисел;odd_count— количество нечётных чисел.
- Прочитать все
nчисел. - Для каждого числа
x:- если
x % 2 == 0, увеличитьeven_count; - иначе увеличить
odd_count.
- если
- Вывести
even_countиodd_count.
4. Почему это работает
Для каждого кода посылки существует ровно один из двух вариантов:
- код чётный;
- код нечётный.
Других случаев нет.
Проверка x % 2 == 0 точно определяет, делится ли число на 2 без остатка. Поэтому каждую посылку мы относим ровно к одному маршруту и учитываем в соответствующем счётчике.
После обработки всех n чисел:
even_countбудет равен числу посылок с чётными кодами;odd_countбудет равен числу посылок с нечётными кодами.
Значит, алгоритм выводит правильный ответ.
5. Сложность
Для каждого из n чисел выполняется одна простая проверка.
- Время:
O(n) - Память:
O(1)для варианта на C++, так как числа можно обрабатывать по одному;O(n)для данного варианта на Python, потому что он сначала считывает весь список.
6. Код на C++17
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int even_count = 0;
int odd_count = 0;
for (int i = 0; i < n; i++) {
long long x;
cin >> x;
if (x % 2 == 0) {
even_count++;
} else {
odd_count++;
}
}
cout << even_count << " " << odd_count << "\n";
return 0;
}
7. Код на Python 3
n = int(input())
a = list(map(int, input().split()))
even_count = 0
odd_count = 0
for x in a:
if x % 2 == 0:
even_count += 1
else:
odd_count += 1
print(even_count, odd_count)
Комментарии