这个题真麻烦啊。 看着书上的思路好不容易 写出 n* logn的算法。 交上去还超时。
这个题 就是满足两个条件 c = a - b, c = a^b 真不容易 写出来。
这个题需要的是模拟c 然后 c是a的约数 根据c可以 求a
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cctype>
using namespace std;
#define ll long long
typedef unsigned long long ull;
#define maxn 30000000
#define INF 1<<30
int s[30000000+10];
int init(){
int sum = 0;
for(int c = 1; c <= maxn/2; c++){
for(int a = c+c ; a <= maxn ; a += c){
int b = a - c;
if((a ^ b) == c)
s[a]++; // a 所满足的所有可能。 因为 a < n 在求 n的时候 要把前n项全部加起来
}
}
for(int i = 2; i <= maxn; i++)
s[i] += s[i-1];
}
int main (){
int counts = 0,num;
scanf("%d",&num);
init();
while(num--){
int n;
scanf("%d",&n);
printf("Case %d: %d\n",++counts,s[n]);
}
return 0;
}