Загрузка данных


#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <algorithm>
#include <cmath>

using namespace std;

bool is_three_digit(int n) {
    n = abs(n);
    return n >= 100 && n <= 999;
}

bool is_two_digit(int n) {
    n = abs(n);
    return n >= 10 && n <= 99;
}

int main() {
    ifstream file("17.txt"); // Убедись, что имя файла совпадает
    vector<int> a;
    int val;

    // Считываем все числа из файла
    while (file >> val) {
        a.push_back(val);
    }

    // 1. Находим максимальный двузначный элемент, оканчивающийся на 3
    int max_2_3 = -200000;
    bool found_max = false;
    for (int x : a) {
        if (is_two_digit(x) && abs(x) % 10 == 3) {
            if (x > max_2_3) {
                max_2_3 = x;
                found_max = true;
            }
        }
    }

    long long limit = (long long)max_2_3 * max_2_3;

    int count = 0;
    long long max_sum_abs = -1;

    // 2. Проверяем тройки (три идущих подряд элемента)
    for (size_t i = 0; i < a.size() - 2; ++i) {
        int x = a[i];
        int y = a[i+1];
        int z = a[i+2];

        // Условие 1: Все числа отрицательны
        bool all_negative = (x < 0 && y < 0 && z < 0);

        // Условие 2: Ни одно число не является трёхзначным
        bool none_three_digit = (!is_three_digit(x) && !is_three_digit(y) && !is_three_digit(z));

        // Условие 3: Сумма модулей min и max элементов тройки <= квадрату max_2_3
        int min_val = min({x, y, z});
        int max_val = max({x, y, z});
        long long current_sum_abs = abs(min_val) + abs(max_val);

        if (all_negative && none_three_digit && (current_sum_abs <= limit)) {
            count++;
            if (current_sum_abs > max_sum_abs) {
                max_sum_abs = current_sum_abs;
            }
        }
    }

    cout << count << " " << max_sum_abs << endl;

    return 0;
}