题目描述
有一个无穷序列如下:
110100100010000100000…
请你找出这个无穷序列中指定位置上的数字
输入格式
第一行一个正整数N,表示询问次数;
接下来的N行每行一个正整数Ai,Ai表示在序列中的位置。
输出格式
N行,每行为0或l,表示序列第Ai位上的数字。
输入输出样例
输入 #1
4
3
14
7
6
输出 #1
0
0
1
0
说明/提示
对于100%的数据有N≤1500000,Ai≤10^9
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
#include<math.h>
#include <map>
using namespace std;
int m,n;
int main(){
scanf("%d",&n);
for(int i = 1; i <= n; i++) {
scanf("%d", &m);
m--;
if(int(sqrt(m*2) )*int(sqrt(m*2)+1 )==m*2 ) {
printf("1\n");
} else {
printf("0\n");
}
}
return 0;
}
这道题可以直接用数学方法做,每组循环的长度依次+1,所以第n个1前的长度为n(n-1)/2(等差数列求和),第n个1的位置为n(n-1)/2+1