• (lower_bound)find the nth digit hdu1597


    find the nth digit

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

    Total Submission(s): 14416    Accepted Submission(s): 4444

    Problem Description

    假设:

    S1 = 1

    S2 = 12

    S3 = 123

    S4 = 1234

    .........

    S9 = 123456789

    S10 = 1234567891

    S11 = 12345678912

    ............

    S18 = 123456789123456789

    ..................

    现在我们把所有的串连接起来

    S = 1121231234.......123456789123456789112345678912.........

    那么你能告诉我在S串中的第N个数字是多少吗?

    Input

    输入首先是一个数字K,代表有K次询问。

    接下来的K行每行有一个整数N(1 <= N < 2^31)

    Output

    对于每个N,输出S中第N个对应的数字.

    Sample Input

    6

    1

    2

    3

    4

    5

    10

    Sample Output

    1

    1

    2

    1

    2

    4

    Author

    8600

    Source

    HDU 2007-Spring Programming Contest - Warm Up 1

    Recommend

    8600

    Statistic | Submit | Discuss | Note

    #include<iostream>
    #include<algorithm>
    using namespace std;
    long long a[70000];
    int p[9]={9,1,2,3,4,5,6,7,8};
    int main()
    {
        long long i;
        a[0]=0;
        for(i=1;i<70000;i++)
            a[i]=a[i-1]+i;
        long long n,t;
        cin>>t;
        while(t--)
        {
            cin>>n;
            long long pos=lower_bound(a,a+70000,n)-a;
            long long ans=n-a[pos-1];   //ans指的是Sn中的第n行的数字的个数。
            long long m=ans%9;       //这样会减少计算量。
            cout<<p[m]<<endl;
        }
        return 0;
    }
    lower_bound():找到大于等于某值第一次出现的迭代器位置。
    upper_bound():找到大于某值第一次出现的迭代器位置。
    equal_range():找到等于某值迭代器范围。
    binary_search():在有序数列中确定给定元素是否存在。
  • 相关阅读:
    STP RSTP
    数组与文字处理
    3 算法、控制结构
    2 变量、运算符、位运算
    1
    小程序点击变换,
    小程序授权demo
    小程序获取参数
    小程序是否转发群还是个人(转发功能)
    小程序分享转发功能实现demo
  • 原文地址:https://www.cnblogs.com/Weixu-Liu/p/9173679.html
Copyright © 2020-2023  润新知