Даны n(n‹=1000000) целых положительных чисел (каждое число меньше 1000000). Задача состоит в том, чтобы вычислить сумму побитового xor (^ в c/c++) значения всех различных комбинаций заданных чисел.
Ограничение по времени 1 секунда. Например, если 3 целых числа представлены как 7, 3 и 5, ответ должен быть 7^3 + 7^5 + 3^5 = 12.
Мой подход:
#include <bits/stdc++.h>
using namespace std;
int num[1000001];
int main()
{
int n, i, sum, j;
scanf("%d", &n);
sum=0;
for(i=0;i<n;i++)
scanf("%d", &num[i]);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
sum+=(num[i]^num[j]);
}
}
printf("%d\n", sum);
return 0;
}
Но мой код не запустился за 1 секунду. Как я могу написать свой код быстрее, который может выполняться за 1 секунду?
Редактировать: на самом деле это проблема с онлайн-судьей, и я получаю превышение предела ЦП с моим кодом выше.
unsigned int
вместоsum
исправит это, хотя это может замедлить или не замедлить вашу программу) - person M.M   schedule 09.08.2015