码迷,mamicode.com
首页 > 其他好文 > 详细

P1895 数字序列

时间:2019-08-20 01:05:46      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:math   size   data   测试   一个   lca   查找   wrap   output   

题目背景

查找数字

题目描述

在下列的无穷数字序列1121231234123451234561234567123456781234567891234567 8910123456789101112345678910......中,查找第i个数字。

输入格式

第一行为正整数t(1≤t≤10),表示测试数据组数。接下来t行,每行一个正整数i(1≤i≤2^31-1)。

输出格式

对于每一个i,输出对应位置上的数字。

输入输出样例

输入 #1
2
3
8
输出 #1
2
2

思路

预处理不必拆开每个数,只要像LCA一样对整十数(10,100,1000......)记录即可

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N=40010;

int p=1,t,n;
int a[N],lis[N];

int main() {
	for(int i=1; i<=40000; i++) {
		a[i]=a[i-1];
		if(i==p) {
			a[i]++;
			p*=10;
		}
	}
	for(int i=1; i<=40000; i++) 
		lis[i]=lis[i-1]+a[i];
	scanf("%d",&t);
	while(t--) {
		scanf("%d",&n);
		for(int i=1; n>lis[i]; i++)
			n-=lis[i];
		int top=1;
		while(n>a[top])
			n-=a[top++];
		int ans[10];
		for(int i=a[top]; i; i--) {
			ans[i]=top%10;
			top/=10;
		}
		printf("%d\n",ans[n]);
	}
	return 0;
}

 

P1895 数字序列

标签:math   size   data   测试   一个   lca   查找   wrap   output   

原文地址:https://www.cnblogs.com/mysh/p/11380658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!