标签:one ble get 测试的 bsp string 空间 alt bbb
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000) 第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)
共T行,如果该位是0,输出0,如果该位是1,输出1。
3 1 2 3
1 1 0
刚开始想用打表的方法,但是没有写出来,后来看了别人代码,发现原来有数学规律,也有人用set来做
其实是有规律的
1 = 1
2 = 1 + (1)
4 = 1 + (1+2)
7 = 1 + (1+2+3)
.....
即 X*(X-1)/2 + 1 == n有解
另t = (int)sqrt(2*n-2) t*(t+1)==2*(n-1)成立时有解
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
int t = (int)sqrt(2*(n-1));
if (t*(t+1) == 2*(n-1))
printf("1\n");
else
printf("0\n");
}
return 0;
}
#include <bits/stdc++.h>
#define N 1000000000
using namespace std;
set<int> s;
int init(){
s.insert(1);
int ans=1;
for(int i=1;ans+i<=1000000000;i++){
s.insert(ans+i);
ans+=i;
}
}
int main(){
int n;
scanf("%d",&n);
init();
while(n--){
int m;
scanf("%d",&m);
if(s.count(m))
printf("1\n");
else
printf("0\n");
}
return 0;
}
打表 二分
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn = 100100;
int One[maxn];
void preOne()
{
int i = 1;
One[0] = 1;
while (i < maxn) {
One[i] = One[i-1]+i;
i++;
}
}
bool Find(int x)
{
int l = 0, r = maxn-1, mid;
while (l <= r) {
mid = (l+r)>>1;
if (One[mid] > x)
r = mid-1;
else if (One[mid] < x)
l = mid+1;
else return true;
}
return false;
}
int main()
{
//freopen("1.txt", "r", stdin);
preOne();
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
if (Find(n))
printf("1\n");
else
printf("0\n");
}
return 0;
}
标签:one ble get 测试的 bsp string 空间 alt bbb
原文地址:http://www.cnblogs.com/ruruozhenhao/p/7479727.html