среда, 3 декабря 2025 г.

 5099

У футбольному турнірі ЛКС Микита, вчитель фізкультури, має підсумувати результати та скласти підсумкову турнірну таблицю. Турнір проходив за круговою системою, тобто кожна команда зіграла з кожною іншою рівно один раз. За перемогу команда отримувала  очки, за нічию —  очко, а за поразку —  очок. У підсумковій таблиці також враховується різниця м'ячів, тобто різниця між забитими та пропущеними голами.

Команди слід ранжувати у спадаючому порядку за кількістю очок. Якщо дві чи більше команд мають однакову кількість очок, вище розташовується команда з більшою різницею м'ячів.

Вхідні дані

У першому рядку дано одне ціле число  () — кількість команд у турнірі. У другому рядку записані  невід’ємних цілих чисел — кількість очок, набрана кожною командою. У третьому рядку записані  цілих чисел — різниця м'ячів для кожної команди.

Вихідні дані

Виведіть  цілих чисел — номери команд у тому порядку, у якому вони повинні бути в підсумковій турнірній таблиці. Якщо команди мають однакову кількість очок і різницю м'ячів, вони повинні зберігати свій початковий порядок з вхідних даних.

Приклади

Вхідні дані #1
3
1 2 3
3 2 1
Відповідь #1
3 2 1
  • Кожна команда характеризується трьома параметрами:

    1. Індекс (номер команди, щоб відновити початковий порядок)

    2. Кількість очок

    3. Різниця м’ячів

  • Потрібно сортувати команди за спаданням очок, потім за спаданням різниці м’ячів.

  • #include <bits/stdc++.h>

    using namespace std;

    struct Team {

        int index;

        int points;

        int goalDiff;

    };

    int main() {

        ios::sync_with_stdio(false);

        cin.tie(nullptr);

        int N;

        cin >> N;

        vector<Team> teams(N);

        for (int i = 0; i < N; i++) {

            teams[i].index = i + 1; // нумерація команд з 1

        }

        for (int i = 0; i < N; i++) {

            cin >> teams[i].points;

        }

        for (int i = 0; i < N; i++) {

            cin >> teams[i].goalDiff;

        }

        stable_sort(teams.begin(), teams.end(), [](const Team &a, const Team &b) {

            if (a.points != b.points)

                return a.points > b.points; // більше очок спереду

            return a.goalDiff > b.goalDiff; // при рівних очках більша різниця м'ячів спереду

        });

        for (int i = 0; i < N; i++) {

            cout << teams[i].index << " ";

        }

        cout << "\n";

        return 0;

    }

    153

    Вхідні дані

    На площині задано два прямокутники. Кожен прямокутник заданий координатами кінців однієї зі своїх діагоналей. Сторони прямокутників паралельні осям координат.

    В першому рядку дано чотири дійсних числа:  — координати кінців діагоналі першого прямокутника.

    У другому рядку дано чотири дійсних числа:  — координати кінців діагоналі другого прямокутника.

    Всі координати — дійсні числа, що за модулем не перевищують .

    Вихідні дані

    Виведіть єдине число — площу перетину двох прямокутників, округлену до трьох знаків після коми.

    Приклади

    Вхідні дані #1
    1 1 5 5
    2 2 3 3
    
    Відповідь #1
    1.000

    • Кожен прямокутник задається координатами кінців однієї діагоналі (x1, y1) і (x2, y2).

    • Знаходимо координати лівого нижнього і правого верхнього кутів:

    xmin=min(x1,x2),xmax=max(x1,x2)x_{\min} = \min(x1, x2),\quad x_{\max} = \max(x1, x2) ymin=min(y1,y2),ymax=max(y1,y2)y_{\min} = \min(y1, y2),\quad y_{\max} = \max(y1, y2)
    • Перетин двох прямокутників також є прямокутником (можливо нульовим):

    xleft=max(x1min,x2min)x_{\text{left}} = \max(x1_{\text{min}}, x2_{\text{min}}) xright=min(x1max,x2max)x_{\text{right}} = \min(x1_{\text{max}}, x2_{\text{max}}) ybottom=max(y1min,y2min)y_{\text{bottom}} = \max(y1_{\text{min}}, y2_{\text{min}}) ytop=min(y1max,y2max)y_{\text{top}} = \min(y1_{\text{max}}, y2_{\text{max}})
    • Площа перетину:

    area=max(0.0,xrightxleft)max(0.0,ytopybottom)\text{area} = \max(0.0, x_{\text{right}} - x_{\text{left}}) \cdot \max(0.0, y_{\text{top}} - y_{\text{bottom}})


    #include <bits/stdc++.h>

    using namespace std;

    int main() {

        ios::sync_with_stdio(false);

        cin.tie(nullptr);


        double x1, y1, x2, y2;

        double x3, y3, x4, y4;

        cin >> x1 >> y1 >> x2 >> y2;

        cin >> x3 >> y3 >> x4 >> y4;

        double x1_min = min(x1, x2), x1_max = max(x1, x2);

        double y1_min = min(y1, y2), y1_max = max(y1, y2);

        double x2_min = min(x3, x4), x2_max = max(x3, x4);

        double y2_min = min(y3, y4), y2_max = max(y3, y4);

        double x_left = max(x1_min, x2_min);

        double x_right = min(x1_max, x2_max);

        double y_bottom = max(y1_min, y2_min);

        double y_top = min(y1_max, y2_max);

        double area = max(0.0, x_right - x_left) * max(0.0, y_top - y_bottom);

        cout << fixed << setprecision(3) << area << "\n";


    }



    Комментариев нет:

    Отправить комментарий