Коля решил написать свою собственную игру про покемонов. Все они принадлежат к одной из двух противоборствующих сторон. Так как

irishka1232 irishka1232    3   16.04.2019 22:50    1

Ответы
ViktoriaDog2006 ViktoriaDog2006  16.04.2019 22:50
Решение, в котором перебираются все возможные пары покемонов и подсчитываются те из них, где разница координат нечётна, набирает 75% баллов. Сложность такого решения O(N2).
Чтобы получить полный балл, нужно отсортировать всех покемонов по возрастанию (или убыванию) координат. Затем можно перебирать их последовательно, подсчитывая тех, кто стоит на чётных и нечётных позициях. Тогда каждый следующий сражается только с теми, чья чётность с ним не совпадает. Сложность такого решения может быть 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;
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Другие предметы