удален
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3676 |
| 2 | jiangly | 3670 |
| 3 | Kevin114514 | 3657 |
| 4 | maroonrk | 3355 |
| 5 | Um_nik | 3353 |
| 6 | squareOf105 | 3346 |
| 7 | tourist | 3343 |
| 8 | strapple | 3324 |
| 9 | heuristica | 3322 |
| 10 | jiangbowen | 3291 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 158 |
| 2 | nik_exists | 150 |
| 2 | maspy | 150 |
| 4 | AmShZ | 143 |
| 4 | Um_nik | 143 |
| 6 | Errichto | 139 |
| 7 | adamant | 137 |
| 8 | BledDest | 135 |
| 9 | maroonrk | 133 |
| 10 | qwexd | 130 |
удален
удалено
удалено
удалено
удалено
удалено
удалено
удалено
удалено
удалено
удалено
удалено
"Хватайте конфеты" — это простая и в то же время интересная задача на логику, которая является второй из соревнования Codeforces Round 859 (Div. 4)
Имя входного файла: Стандартный ввод / input.txt
Имя выходного файла: Стандартный вывод / output.txt
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Михай и Бьянка играют с мешочками конфет. У них есть последовательность $$$a$$$ из $$$n$$$ мешочков с конфетами. В $$$i$$$ -м мешке $$$a_{i}$$$ конфет. Мешочки раздаются игрокам в порядке от первого до $$$n$$$ -го мешочка.
Если в мешке чётное количество конфет, то его хватает Михай. В противном случае его хватает Бьянка. Как только мешок схвачен, количество конфет в нём прибавляется к общему количеству конфет игрока, который его взял.
Михай хочет покрасоваться, поэтому он хочет изменить порядок массива так, чтобы в любой момент (кроме самого начала, когда у обоих нет конфет) у Михая было строго больше конфет, чем у Бьянки. Помогите Михаю выяснить, существует ли такой способ переставить мешочки.
Первая строка ввода содержит целое число $$$t$$$ (1 ≤ $$$t$$$ ≤ 1000 ) — количество наборов входных данных.
Первая строка каждого набора входных данных содержит одно целое число $$$n$$$ (1 ≤ $$$n$$$ ≤ 100 ) — количество мешков.
Вторая строка каждого набора входных данных содержит $$$n$$$ разделенных пробелами целых чисел $$$a_{i}$$$ (1 ≤ $$$a_{i}$$$ ≤ 100 ) — количество конфет в каждом мешке.
Для каждого набора входных данных выведите «YES» (без кавычек), если такая перестановка существует, и «NO» (без кавычек) в противном случае.
Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.
3
4
1 2 3 4
4
1 1 1 2
3
1 4 3
YES
NO
NO
Первым делом нам нужно организовать правильный ввод данных. В начале у нас вводится переменная t — сколько всего наборов входных данных. Дальше t раз вводится число n и n $$$a_{i}$$$ чисел в строку. Где n — количество мешков, а $$$a_{i}$$$ — количество конфет в мешке.
Чтобы ввести t наборов данных я буду использовать цикл for. А чтобы ввести n $$$a_{i}$$$ чисел в строку буду использовать конструкцию из функций list() и map().
t = int(input())
for i in range(t):
n = int(input())
a = list(map(int, input().split()))
Итак по условию задачи мы должны определить существует ли способ переставить мешочки так, чтобы у Михая в любой момент всегда было строго больше конфет чем у Бьянки кроме начала когда у них обоих по 0 конфет. Так как же определить существует способ или нет?
Так как мы знаем что Михай хватает мешки с чётным количеством конфет мы можем просто эти мешки условно переместить в начало, ведь тогда нам останется только проверить что сумма конфет в мешках с чётным количеством конфет больше суммы конфет в мешках с нечётным количеством конфет. Так как если это условие выполняется то мы сможем перетащить мешки так, чтобы у Михая было всегда больше конфет чем у Бьянки. Если же это условие не выполняется то способа переставить мешки так, чтобы у Михая было всегда больше конфет чем у Бьянки нет.
Итак чтобы считать конфеты которые находятся в мешках у Михая я завёл переменную s, а чтобы считать конфеты в мешках у Бьянки переменную d. Дальше я организую цикл for по массиву a. В цикле проверяю делимость количества конфет на 2, то есть на чётность и если число конфет в мешке чётное то я прибавляю число конфет к переменной s, а если нет то число конфет прибавляю к переменной d.
s = 0
d = 0
for i in a:
if i % 2 == 0:
s += i
else:
d += i
Остаётся проверить условие что сумма конфет Михая больше суммы конфет Бьянки, если это условие верно то это значит, что способ переставить мешки с конфетами так, чтобы у Михая было всегда больше конфет кроме начала существует, следовательно вывожу "YES", иначе вывожу "NO".
В итоге мы получаем конечный код:
t = int(input())
for i in range(t):
n = int(input())
a = list(map(int, input().split()))
s = 0
d = 0
for i in a:
if i % 2 == 0:
s += i
else:
d += i
if s > d:
print("YES")
else:
print("NO")
Вот и всё решение задачи.
Вот таким получился мой первый разбор. Надеюсь вам понравилось и было всё понятно и если это так то голосуйте плюсом за этот разбор. Если было что-то непонятно, есть предложения для дальнейших разборов, или есть интересная задача по которой вы хотите увидеть разбор, то обязательно пишите.
Всем Удачи!
| Название |
|---|


