Решение, в котором перебираются все возможные пары покемонов и подсчитываются те из них, где разница координат нечётна, набирает 75% баллов. Сложность такого решения O(N2).
Чтобы получить полный балл, нужно отсортировать всех покемонов по возрастанию (или убыванию) координат. Затем можно перебирать их последовательно, подсчитывая тех, кто стоит на чётных и нечётных позициях. Тогда каждый следующий сражается только с теми, чья чётность с ним не совпадает. Сложность такого решения может быть O(N log N) при использовании эффективной сортировки.
#include <fstream>
#include <algorithm>
int main()
{
int n;
in >> n;
for (int i = 0 ; i < n ; ++i)
in >> a[i];
std::sort(a, a + n);
int count[2] = {0, 0};
long long res = 0;
for (int i = 0 ; i < n ; ++i)
{
res += count[1 - a[i] % 2];
++count[a[i] % 2];
}
out << res;
Чтобы получить полный балл, нужно отсортировать всех покемонов по возрастанию (или убыванию) координат. Затем можно перебирать их последовательно, подсчитывая тех, кто стоит на чётных и нечётных позициях. Тогда каждый следующий сражается только с теми, чья чётность с ним не совпадает. Сложность такого решения может быть O(N log N) при использовании эффективной сортировки.
#include <fstream>
#include <algorithm>
std::ifstream in("input.txt");
std::ofstream out("output.txt");
int a[100000];
int main()
{
int n;
in >> n;
for (int i = 0 ; i < n ; ++i)
in >> a[i];
std::sort(a, a + n);
int count[2] = {0, 0};
long long res = 0;
for (int i = 0 ; i < n ; ++i)
{
res += count[1 - a[i] % 2];
++count[a[i] % 2];
}
out << res;