Решение олимпиадной задачи — Оттепель

  • В этой теме 0 ответов, 1 участник, последнее обновление 3 месяца назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #6456
      @admin

      Условие задачи взято с сайта acmp.ru (Время: 1 сек. Память: 16 Мб Сложность: 17%):

      Уставшие от необычно теплой зимы, жители решили узнать, действительно ли это самая длинная оттепель за всю историю наблюдений за погодой. Они обратились к синоптикам, а те, в свою очередь, занялись исследованиями статистики за прошлые годы. Их интересует, сколько дней длилась самая длинная оттепель.

      Оттепелью они называют период, в который среднесуточная температура ежедневно превышала 0 градусов Цельсия. Напишите программу, помогающую синоптикам в работе.

      Входные данные

      Во входном файле INPUT.TXT сначала записано число N – общее количество рассматриваемых дней (1 ≤ N ≤ 100). В следующей строке через пробел располагается N целых чисел, разделенных пробелами. Каждое число – среднесуточная температура в соответствующий день. Температуры – целые числа и лежат в диапазоне от –50 до 50.

      Выходные данные

      В выходной файл OUTPUT.TXT требуется вывести одно число – длину самой продолжительной оттепели, то есть наибольшее количество последовательных дней, на протяжении которых среднесуточная температура превышала 0 градусов. Если температура в каждый из дней была неположительной, выведите 0.

      Примеры

      INPUT.TXT OUTPUT.TXT
      1 6
      -20 30 -40 50 10 -10
      2
      2 8
      10 20 30 1 -10 1 2 3
      4
      3 5
      -10 0 -10 0 -10
      0

      Разбор решения задачи

      Эта задача почти не отличается от уже разобранной нами — «Нули«. В обоих случаях надо найти наибольшую длину последовательности, но если в прошлый раз это была последовательность нулей, то теперь — последовательность положительных чисел.

      Решение может выглядеть так:

      #include <fstream>
      using namespace std;
      
      int main() {
        ifstream ifst("input.txt");
        ofstream ofst("output.txt");
      
        int n;
        ifst >> n;
      
        int maxLength = 0;
        int currentLength = 0;
      
        for (int i = 0; i < n; ++i) {
          int temperature;
          ifst >> temperature;
      
          if (temperature > 0) {
            ++currentLength;
          }
          else {
            currentLength = 0;
          }
      
          maxLength = max(maxLength, currentLength);
        }
      
        ofst << maxLength;
      }

      Можно считать содержимое файла в вектор и применять алгоритм find_if в цикле — однако, как показано в «Нулях» — код от этого понятней не станет.

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.