Дадени са 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 секунда?
Редактиране: Всъщност това е проблем с онлайн съдия и получавам Cpu Limit Exceeded с моя горен код.
unsigned int
заsum
ще поправи това, въпреки че това може или не може да забави вашата програма) - person M.M   schedule 09.08.2015