QOJ.ac

QOJ

Límite de tiempo: 2.0 s Límite de memoria: 256 MB Puntuación total: 100

#18419. Рейтинги стран

Estadísticas

В SEATST учатся $N$ студентов. Каждый студент представляет ровно одну страну. После соревнования все студенты получили различные баллы.

Прабаво собирается опубликовать таблицу лидеров на официальном сайте. Для каждого студента в таблице указаны страна, балл, глобальный ранг и ранг внутри страны.

  • Глобальный ранг студента определяется как количество студентов, набравших больше баллов, чем он.
  • Ранг внутри страны студента определяется как количество студентов из той же страны, набравших больше баллов, чем он.

Пример таблицы лидеров приведен ниже:

Страна Балл Глобальный ранг Ранг внутри страны
Сингапур 574 0 0
Малайзия 483 1 0
Сингапур 466 2 1
Индонезия 460 3 0
Сингапур 458 4 2
Малайзия 454 5 1
Сингапур 448 6 3
Малайзия 440 7 2
Индонезия 438 8 1

Заметим, что как глобальные ранги, так и ранги внутри страны начинаются с $0$, и никакие ранги не пропускаются (ни в глобальном зачете, ни внутри страны).

Однако при публикации таблицы в интернете Прабаво забыл указать страны и баллы студентов. Для каждого студента нам даны только его глобальный ранг и его ранг внутри страны.

Прабаво пытается исправить ситуацию и просит вас помочь вычислить две величины:

  • количество пар различных студентов, которые обязаны принадлежать к одной и той же стране, И
  • количество пар различных студентов, которые обязаны принадлежать к разным странам.

Предупреждение: Если существуют два способа распределения студентов по странам, удовлетворяющие данным глобальным рангам и рангам внутри страны, при которых в одном случае два студента принадлежат к одной стране, а в другом — к разным, то такая пара студентов не должна учитываться ни в одной из величин.

Помогите Прабаво!

Детали реализации

Вам необходимо реализовать следующие две процедуры:

long long count_same_country(int N, std::vector<int> country_rank)
long long count_diff_country(int N, std::vector<int> country_rank)
  • $N$: количество студентов.
  • country_rank: массив длины $N$, представляющий ранги внутри страны. country_rank[i] — это ранг внутри страны для студента, чей глобальный ранг равен $i$, для всех $0 \le i \le N - 1$.

Первая процедура должна возвращать количество неупорядоченных пар различных студентов таких, что во всех распределениях студентов по странам, согласующихся с таблицей лидеров, студенты в паре принадлежат к одной и той же стране.

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

Каждая из процедур будет вызвана не более одного раза для каждого теста.

Ограничения

  • $1 \le N \le 1\,000\,000$.
  • Существует хотя бы одно распределение студентов по странам, удовлетворяющее country_rank.

Подзадачи

Для первых 6 подзадач будет вызвана только count_same_country.

  1. ($3$ балла) $N \leq 8$.
  2. ($6$ баллов) country_rank содержит $0$ не более двух раз.
  3. ($6$ баллов) country_rank не содержит $2$.
  4. ($3$ балла) $N \leq 300$.
  5. ($3$ балла) $N \leq 2000$.
  6. ($9$ баллов) Без дополнительных ограничений.

Для последних 6 подзадач будет вызвана только count_diff_country.

  1. ($7$ баллов) $N \leq 8$.
  2. ($14$ баллов) country_rank содержит $0$ не более двух раз.
  3. ($14$ баллов) country_rank не содержит $2$.
  4. ($7$ баллов) $N \leq 300$.
  5. ($7$ баллов) $N \leq 2000$.
  6. ($21$ балл) Без дополнительных ограничений.

Примеры

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

count_same_country(9, [0, 0, 1, 0, 2, 1, 3, 2, 1])

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

4

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

count_diff_country(9, [0, 0, 1, 0, 2, 1, 3, 2, 1])

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

17

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

count_same_country(5, [0, 1, 0, 1, 2])

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

2

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

count_diff_country(5, [0, 1, 0, 1, 2])

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

4

Примеры использования проверяющей программы

Формат входных данных:

N X

где X — это строка same или diff, означающая, что вызывается функция count_X_country, а C[i] представляет country_rank[i] для всех $0 \leq i \leq N - 1$.

Формат выходных данных:

Одно целое число, представляющее результат работы count_X_country.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.