P1795 无穷的序列_NOI导刊2010提高(05)
题目描述
有一个无穷序列如下:
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<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 50000 using namespace std; int n,l,r,q,mid,ans,sum,a[N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } bool check(int x) { if(a[x]<=q) return 1; return 0; } int main() { n=read(); for(int i=1;i<=1000000000;i+=sum) a[++sum]=i; for(int i=1;i<=n;i++) { q=read(); l=1,r=N; while(l<r) { mid=(l+r)>>1; if(check(mid)) ans=mid,l=mid+1; else r=mid; } if(a[ans]==q) printf("1\n"); else printf("0\n"); } return 0; }
时间: 2024-10-07 10:57:36