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

UVa 10427 - Naughty Sleepy Boys

时间:2015-04-02 13:29:29      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

题目:从1开始连续的整数构成一个字符串,问第n为位对应的字符是谁。

分析:动态规划,dp。统计每个数字对应的前面的子串的长度;

            找到给定长度的对应的串的子串,然后取对应数字的n-len(子串)的字符即可。

说明:加油╮(╯▽╰)╭。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

long long sum[20000002];

char temp[10];
char *itoc(int i)
{
	int t = i,count = 0;
	while (t) {
		count ++;
		t = t/10;
	}
	temp[count --] = 0;
	while (i) {
		temp[count --] = i%10 + '0';
		i /= 10;
	}
	return temp;
}

int bs(int key)
{
	int l = 0,r = 20000000;
	while (l < r) {
		int mid = (l+r+1)/2;
		if (sum[mid] >= key)
			r = mid-1;
		else l = mid;
	}
    return l;
}

int main()
{
	sum[0] = 0LL;
	int add = 1;
	for (int i = 1; i < 20000001; ++ i) {
		if (i == 10 || i == 100 || i == 1000 || i == 10000 
				|| i == 100000 || i == 1000000 || i == 10000000)
			add ++;
		sum[i] = sum[i-1]+add;
	}
	
	int n,m;
	while (~scanf("%d",&n)) {
		m = bs(n);
		printf("%c\n",itoc(m+1)[n-sum[m]-1]);
	}
	
    return 0;
}


UVa 10427 - Naughty Sleepy Boys

标签:

原文地址:http://blog.csdn.net/mobius_strip/article/details/44830025

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