题目描述
给定整数m以及n个数字A1, A2, …, An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果。请求出这些结果中大于m的有多少个。
输入
第一行包含两个整数n, m。 第二行给出n个整数A1, A2, …, An。
| 样例输入
3 10 6 5 10
|
输出
输出仅包括一行,即所求的答案。
| 样例输出
2
|
时间限制C/C++语言:1000MS其它语言:3000MS | 内存限制C/C++语言:65536KB其它语言:589824KB |
很容易想到O(N^2) 算法,只能通过30%, 注意优先级,加()
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
const int N = 1000010;
int nums[N];
using namespace std;
int main()
{
int n, m;
int count = 0;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%d", &nums[i]);
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if ((nums[i] ^ nums[j]) > m) {
count++;
}
}
}
printf("%d\n", count);
}
要想到优化的算法