ural 1209. 1, 10, 100, 1000... 二分

来源:互联网 发布:arrayslice php 编辑:程序博客网 时间:2024/06/09 17:19

1209. 1, 10, 100, 1000...

Time limit: 1.0 second
Memory limit: 64 MB
Let's consider an infinite sequence of digits constructed of ascending powers of 10 written one after another. Here is the beginning of the sequence: 110100100010000… You are to find out what digit is located at the definite position of the sequence.

Input

There is the only integer N in the first line (1 ≤ N ≤ 65535). The i-th of N left lines contains the integer Ki — the number of position in the sequence (1 ≤ Ki ≤ 231 − 1).

Output

You are to output N digits 0 or 1 separated with a space. More precisely, the i-th digit of output is to be equal to the Ki-th digit of described above sequence.

Sample

inputoutput
431476
0 0 1 0
Problem Author: Alexey Lakhtin
Problem Source: USU Open Collegiate Programming Contest October'2002 Junior Session

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;public class Main {public static void main(String[] args) {new Task().solve();}}class Task {InputReader in = new InputReader(System.in);PrintWriter out = new PrintWriter(System.out);int calc(long pos){long l = 1 , r = 65536 , s = -1 ;while(l <= r){long m = (l + r) >> 1 ;    long sum = (1 + m) * m / 2 ;    if(sum >= pos){    s = m ;    r = m - 1 ;    }    else{    l = m + 1 ;    }}s-- ;long sum = (1 + s) * s / 2 ;if(sum + 1 == pos){return 1 ;}return 0 ; }void solve() {int t = in.nextInt() ;while(t-- > 0){out.println(calc(in.nextLong())) ;}out.flush();}}class InputReader {public BufferedReader reader;public StringTokenizer tokenizer;public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = new StringTokenizer("");}private void eat(String s) {tokenizer = new StringTokenizer(s);}public String nextLine() {try {return reader.readLine();} catch (Exception e) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String s = nextLine();if (s == null)return false;eat(s);}return true;}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public int[] nextInts(int n){int[] nums = new int[n] ;for(int i = 0 ; i < n ; i++){nums[i] = nextInt() ;}return nums ;}public long nextLong() {return Long.parseLong(next());}public double nextDouble() {return Double.parseDouble(next());}public BigInteger nextBigInteger() {return new BigInteger(next());}}




原创粉丝点击