Ограничение по времени: 1
секунда
Ограничение по памяти: 256
мегабайт
Алексей очень спешил в поездку и, забежав в поезд, не успел посмотреть номер вагона, зато успел посчитать, что перед ним находится не менее A
вагонов, а за ним —
не более B
вагонов. Всего в составе N
вагонов. Выведите количество вариантов номера вагона, в котором может оказаться Алексей.
код на C++
cpp
#include <iostream>
#include <vector>
int main() {
int N, A, B;
std::cin >> N >> A >> B;
std::vector<int> vagons(N);
for (int i = 0; i < N; i++) {
std::cin >> vagons[i];
}
std::vector<int> prefixSum(N + 1);
for (int i = 1; i <= N; i++) {
prefixSum[i] = prefixSum[i - 1] + vagons[i - 1];
}
int count = 0;
int left = 0, right = N - 1;
while (right >= left) {
int sum = prefixSum[right + 1] - prefixSum[left];
if (sum > B) {
right--;
} else if (sum < A) {
left++;
} else {
count++;
left++;
}
}
std::cout << count << std::endl;
return 0;
}
Сложность данного алгоритма составляет O(N), где N - количество вагонов в составе. Это связано с тем, что мы проходим через весь массив vagons два раза - один раз для вычисления префиксных сумм и второй раз для подсчета количества вариантов номера вагона.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет