思路是先打表打出所有是1的数的位置 然后输入每个数之后用二分暴力查找它是不是在这个表里
#include<iostream>
using namespace std;
typedef long long ll;
const int M = 1e9;
ll save[44722];
int bin_s(int k){
int l = 1, r = 44721;
int mid;
while(l <= r){
mid = (l + r) / 2;
if(save[mid] == k){
return mid;
}
if(save[mid] < k){
l = mid + 1;
}
else{
r = mid - 1;
}
}
return -1;
}
int main() {
ll p = 1;
ll add = 1;
ll pos = 1;
while(p <= M) {
save[pos] = p;
p += add;
add ++;
pos ++;
}
int t;
cin >> t;
while(t --) {
int x;
cin >> x;
if(bin_s(x) == -1) cout << "0" << endl;
else cout << "1" << endl;
}
return 0;
}
也许本地打出来表可以节省一点时间 但是语句太长了没法提交qwq 总之请大佬们救救我这个废物qwq