From aa87df610fb65c45954e8ef91ee61316d9261dcd Mon Sep 17 00:00:00 2001 From: kleeeeem Date: Mon, 10 Mar 2025 14:21:42 +0300 Subject: [PATCH] Create lab7_KlemyatsionokPolina_j3113 --- lab7_KlemyatsionokPolina_j3113 | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lab7_KlemyatsionokPolina_j3113 diff --git a/lab7_KlemyatsionokPolina_j3113 b/lab7_KlemyatsionokPolina_j3113 new file mode 100644 index 00000000..fe75c586 --- /dev/null +++ b/lab7_KlemyatsionokPolina_j3113 @@ -0,0 +1,38 @@ +#include +#include + +class Solution { +public: + int candy(std::vector& ratings) { + int n = ratings.size(); // получаем количество детей + if (n == 0) return 0; // если детей нет, возвращаем 0 + + std::vector candies(n, 1); // создаем массив candies размером n, заполняем его единицами + // (каждый ребенок должен получить хотя бы одну конфету) + + // Левый проход (слева направо): раздаем конфеты тем, у кого рейтинг выше, чем у левого соседа + for (int i = 1; i < n; i++) { + if (ratings[i] > ratings[i - 1]) { // если текущий ребенок имеет рейтинг выше предыдущего + candies[i] = candies[i - 1] + 1; // дем ему на 1 конфету больше + } + } + + // Правый проход (справа налево): раздаем конфеты тем, у кого рейтинг выше, чем у правого соседа + for (int i = n - 2; i >= 0; i--) { // идем с предпоследнего элемента к первому + if (ratings[i] > ratings[i + 1]) { // если текущий ребенок имеет рейтинг выше правого соседа + candies[i] = std::max(candies[i], candies[i + 1] + 1); + // берем максимум из текущего значения (чтобы сохранить левый проход) и значения, которое мы должны выдать по правому проходу + } + } + + // Подсчет общего количества конфет + int totalCandies = 0; + for (int candy : candies) { // проходим по массиву candies и суммируем значения + totalCandies += candy; + } + + return totalCandies; // возвращаем итоговое количество конфет + } +}; + +