这是一个看似简单,其实很难受。

本来我想发挥它的标题轨道基础。没想到反被消遣-_-|||。

看它在个人基础上,良好的数学就干脆点,但由于过于频繁,需求将被纳入全,因此,应该难度4星以上。

方法就是直接打表。然后直接模拟。利用打表去掉一大段数据,剩下数据量十分小了。故此能够直接模拟。

打表是为了计算前面的周期数,把周期数直接去掉。

主要难点是后面10位数以上的数有2位, 3位,4位等情况要考虑。- 以下使用getNewNums一个函数攻克了,想通了,就几行代码,还不用难理解的数学计算,呵呵。

然后是模拟数数位。那么就考主要的编程功力了。

简洁到能够不使用不论什么数学库就0ms过的程序:

#include <stdio.h>

const int MAX_SIZE = 65535;
long long arr[MAX_SIZE]; inline int getNewNums(int i)
{
int n = i;
for (int ten = 10; ten <= i; ten = (ten << 1) + (ten << 3))
{
n += i - ten + 1;
}
return n;
} void fillArr()
{
arr[0] = 0; arr[1] = 1; arr[2] = 3;
for (int i = 3; i < MAX_SIZE; i++)
{
arr[i] = arr[i-1] + getNewNums(i);
}
} int getNum(int n)
{
int i = 1;
for ( ; arr[i] < n && i < MAX_SIZE; i++);
n -= (int)arr[i-1];
int num = 1;
while (n) //直接模拟,由于前面已经截去一大段数据了,所以这里能够模拟
{
char ch[33];
int j = 0, tmp = num;
while (num)
{
ch[j++] = num % 10 + '0';
num /= 10;
}
for (j--; j >= 0; j--)
{
if (n == 1) return ch[j] - '0';
n--;
}
num = tmp+1;
}
return num; //false return.随便返回个数,上面已经会返回值了。 } int main()
{
fillArr();
int T, n;
scanf("%d", &T);
while (T--)
{
scanf("%d", &n);
printf("%d\n", getNum(n));
}
return 0;
}

POJ 1019 Number Sequence 解读的更多相关文章

  1. Poj 1019 Number Sequence( 数据分析和操作)

    一.题目大意 有这样一个序列包含S1,S2,S3...SK,每一个Si包括整数1到 i.求在这个序列中给定的整数n为下标的数. 例如,前80位为1121231234123451234561234567 ...

  2. poj 1019 Number Sequence 【组合数学+数字x的位宽函数】

    题目地址:http://poj.org/problem?id=1019 Number Sequence Time Limit: 1000MS   Memory Limit: 10000K Total ...

  3. POJ 1019 Number Sequence

    找规律,先找属于第几个循环,再找属于第几个数的第几位...... Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submi ...

  4. POJ - 1019 Number Sequence (思维)

    https://vjudge.net/problem/POJ-1019 题意 给一串1 12 123 1234 12345 123456 1234567 12345678 123456789 1234 ...

  5. PKU 1019 Number Sequence(模拟,思维)

    题目 以下思路参考自discuss:http://poj.org/showmessage?message_id=176353 /*我的思路: 1.将长串数分成一个个部分,每个部分是从1到x的无重复的数 ...

  6. POJ 1019:Number Sequence 二分查找

    Number Sequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36013   Accepted: 10409 ...

  7. HDU 1005 Number Sequence

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. hdu 1005:Number Sequence(水题)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  9. hdu1005 Number Sequence(寻找循环节)

    主题链接: pid=1005">huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力 ...

随机推荐

  1. 记录break和continue的区别

    我对break 和 continue 还是有点搞不清除,今天在看<Thinking in Java>,看到这个,学习了一下.       break的作用是跳出这个循环(如果这个break ...

  2. HBase总结(二十)HBase经常使用shell命令具体说明

    进入hbase shell console $HBASE_HOME/bin/hbase shell 假设有kerberos认证,须要事先使用对应的keytab进行一下认证(使用kinit命令),认证成 ...

  3. pinyin4j的使用

    pinyin4j的使用   pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获取各种格式和需求的拼音,功能强悍,下面看看如何使用pinyin4j.     import net.sourc ...

  4. web框架python

    22.python笔记之web框架   一.web框架本质 1.基于socket,自己处理请求 #!/usr/bin/env python3 #coding:utf8 import socket de ...

  5. OCP读书笔记(4) - 配置备份设置

    4.Configuring Backup Settings 查看RMAN持久化设置 [oracle@easthome ~]$ rman target / RMAN> show all; SQL& ...

  6. linux find命令强大之处

    find命令 find pathname -options [-print -exec -ok ...]   -print: find命令将匹配的文件输出到标准输出.   -exec: find命令对 ...

  7. 修改emlog后台登录路径的方法(转)

    emlog后台登录地址的目录名称默认为admin,并且官方没有提供自定义后台登录入口名字的功能,这多少让我们觉得有些不安全,毕竟暴露一个网站的后台不是一件安全的事,今天就给您说下修改方法,增加一下网站 ...

  8. net 面向接口框架

    Asp.net 面向接口框架之应用程序上下文作用域组件 在团队中推广面向接口开发两年左右,成果总体来说我还是挺满意的,使用面向接口开发的模块使用Unity容器配置的功能非常稳定,便于共享迁移(另一个项 ...

  9. spring集成 JedisCluster 连接 redis3.0 集群

    最近在公司做了 jedisCluster整合spring 的配置, 分享如下 客户端采用最新的jedis 2.7 1. maven依赖: <dependency> <groupId& ...

  10. c++各类变量汇总

    一.局部变量和全局变量: (1)局部变量:局部变量也叫自动变量,它声明在函数开始,生存于栈,它的生命随着函数的返回而结束. #include <stdio.h> int main(void ...