POJ-1019 Number Sequence 数学

  题目链接:http://poj.org/problem?id=1019

  水题一枚,分段查找即可,只是处理上要注意细节。

 1 //STATUS:C++_AC_0MS_428KB

 2 #include<stdio.h>

 3 #include<stdlib.h>

 4 #include<string.h>

 5 #include<math.h>

 6 #include<iostream>

 7 #include<string>

 8 #include<algorithm>

 9 #include<vector>

10 #include<queue>

11 #include<stack>

12 using namespace std;

13 #define LL __int64

14 #define pii pair<int,int>

15 #define Max(a,b) ((a)>(b)?(a):(b))

16 #define Min(a,b) ((a)<(b)?(a):(b))

17 #define mem(a,b) memset(a,b,sizeof(a))

18 #define lson l,mid,rt<<1

19 #define rson mid+1,r,rt<<1|1

20 const int N=33010,INF=0x3f3f3f3f,MOD=1999997;

21 const LL LLNF=0x3f3f3f3f3f3f3f3fLL;

22 

23 LL sum[N];

24 int T,n;

25 

26 int main()

27 {

28   //  freopen("in.txt","r",stdin);

29     int i,j,t;

30     sum[1]=j=1;

31     for(i=2;i<10;i++){j+=1;sum[i]=sum[i-1]+j;}

32     for(;i<100;i++){j+=2;sum[i]=sum[i-1]+j;}

33     for(;i<1000;i++){j+=3;sum[i]=sum[i-1]+j;}

34     for(;i<10000;i++){j+=4;sum[i]=sum[i-1]+j;}

35     for(;i<32000;i++){j+=5;sum[i]=sum[i-1]+j;}

36     scanf("%d",&T);

37     while(T--)

38     {

39         scanf("%d",&n);

40         for(i=1;sum[i]<n;i++);

41         n-=sum[i-1];

42 

43         for(i=1,j=9;n>0;n-=j*i,i++,j*=10);

44         n+=(j/=10)*(--i);

45         for(j=1,t=i;--t;j*=10);

46 

47         for(;n>0;j++)n-=i;

48         j--,n=-n;

49         for(;n;j/=10,n--);

50         printf("%d\n",j%10);

51     }

52     return 0;

53 }

 

你可能感兴趣的:(sequence)