poj 1019 Number Sequence 【组合数学+数字x的位宽函数】
题目地址:http://poj.org/problem?id=1019
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 35680 | Accepted: 10287 |
Description
For example, the first 80 digits of the sequence are as follows:
11212312341234512345612345671234567812345678912345678910123456789101112345678910
Input
first line of the input file contains a single integer t (1 ≤ t ≤ 10),
the number of test cases, followed by one line for each test case. The
line for a test case contains the single integer i (1 ≤ i ≤ 2147483647)
Output
Sample Input
2
8
3
Sample Output
2
2
分析:序列如上所示,要求这个序列的第n位是什么,首先需要知道的是:一个数x的宽度怎么算?可以每次让x除10,看看多少次可以除尽。
不过比较麻烦,有简单的算法:f[x]=log10(x)+1; 999的位宽=log10(999)+1=3;
有了这个就可以来想怎么解决上面的问题。
参考博客1:http://www.cnblogs.com/ACShiryu/archive/2011/08/05/2129009.html
参考博客2:http://blog.csdn.net/lyy289065406/article/details/6648504一个大序列可以划分成许多个有规律的子序列,先找到第n位在那个子序列上,再找到在子序列的那个数字上,再找到在该数字的哪一位上。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <cmath>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#define N 100000+100 using namespace std;
long long int f[40000];
long long int s[40000];
int main()
{
int i, j; memset(f, 0, sizeof(f));
memset(s, 0, sizeof(s)); long long int sum=0;
f[1]=1; s[1]=1;
i=2;
while( i<=31269 )
{
f[i]=f[i-1]+(int)log10((double)i)+1;
s[i]=s[i-1]+f[i];
i++;
}//打表 int tg; scanf("%d", &tg);
while(tg--){
int n;
scanf("%d", &n);
for(i=1; i<=31269; i++){
if(s[i]>=n) break;
}
int pos=i; //找到在第pos个子序列上
n=n-s[pos-1];
for(j=1; j<=pos; j++){
n=n-((int)log10((double)j)+1); //减去当前这个数的宽度
if(n<=0){
break;
}
}
int pos2=j;//找到在子序列的第pos2个数上
n=n+(int)log10((double)pos2)+1;//在这个数的第n位上 int dd=(int)log10((double)pos2)+1-n;
int q=1, w=1;
for(i=1; i<=dd; i++) {q=q*10; w=w*10;} w=w*10; int ans;
ans=pos2%w/q;
printf("%d\n", ans );//输出结果
}
return 0;
}
poj 1019 Number Sequence 【组合数学+数字x的位宽函数】的更多相关文章
- Poj 1019 Number Sequence( 数据分析和操作)
一.题目大意 有这样一个序列包含S1,S2,S3...SK,每一个Si包括整数1到 i.求在这个序列中给定的整数n为下标的数. 例如,前80位为1121231234123451234561234567 ...
- POJ 1019 Number Sequence
找规律,先找属于第几个循环,再找属于第几个数的第几位...... Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- POJ - 1019 Number Sequence (思维)
https://vjudge.net/problem/POJ-1019 题意 给一串1 12 123 1234 12345 123456 1234567 12345678 123456789 1234 ...
- POJ 1019 Number Sequence 解读
这是一个看似简单,其实很难受. 本来我想发挥它的标题轨道基础.没想到反被消遣-_-|||. 看它在个人基础上,良好的数学就干脆点,但由于过于频繁,需求将被纳入全,因此,应该难度4星以上. 方法就是直接 ...
- PKU 1019 Number Sequence(模拟,思维)
题目 以下思路参考自discuss:http://poj.org/showmessage?message_id=176353 /*我的思路: 1.将长串数分成一个个部分,每个部分是从1到x的无重复的数 ...
- POJ 1019:Number Sequence 二分查找
Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36013 Accepted: 10409 ...
- Number Sequence(poj 1019)
题意: 有一串数字串,其规律为 1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 1234 ...
- HDU 1005 Number Sequence
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1005:Number Sequence(水题)
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
随机推荐
- HTTP ----通信机制
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: (1) 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立 ...
- Fiddler 默认不能抓取页面信息的问题
先如下配置
- docker教程之从一头雾水到不一头雾水(3)
本文主要是介绍Docker容器的相关内容 容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要 ...
- python在windows系统中打印中文乱码
转自:http://www.111cn.net/phper/python/58920.htm 中文乱码对于程序开发人员来讲不是什么怪事情了,今天我在使用python打印中文时就出现乱码了,下面我们一起 ...
- 【Java并发编程】并发编程大合集
转载自:http://blog.csdn.net/ns_code/article/details/17539599 为了方便各位网友学习以及方便自己复习之用,将Java并发编程系列内容系列内容按照由浅 ...
- 题目1 : Farthest Point
时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 Given a circle on a two-dimentional plane. Output the integral ...
- ubuntu安装中文man手册
1.安装manpages-zh包 sudo apt-get install manpages-zh 2.修改manpath文件 执行如下命令: vi /etc/manpath.config %s+/u ...
- Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)
我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...
- 用PreferenceActivity做一个标准的设置界面
最后接触到一个任务,做一个工厂设置,在我看来工厂设置不需要多美观,但是一定要方便修改,添加功能,再就是使用方便,我就想到了用PreferenceActivity,android系统的settings就 ...
- bugzilla部署记录
这两天部署了个bugzilla,记录如下. 1.主要参考文章 Bugzilla安装过程.Bugzilla使用手册及解决方案 如果你使用的系统是win7或者IIS是7.0的话,你可能还需要Win7 安装 ...