uva 10706 Number Sequence(数学规律)
题目大意:有一个有0 ~ 9组成的序列,1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 。。。。就是第一位为1. 第二为为1 ,第三为为2, 然后10 的部分注意下, 为1 和0 两个, 100 就是1 , 0和0 三位,以此类推, 要求给出tmp, 输出序列中的tmp位为什么数字。
解题思路:数据很大,肯定不能模拟,找规律。
这两个是为推出来的用来打表的公式:
1、sum[i] = sum[i - 1] * 2 - sum[i - 2] + w (w为当前i 的位数, sum[i]表示当前数字出现到i的时候占到序列的第几位)。
公式可以看成两部分, sum[i - 1] 和sum[i - 1] - sum[i - 2] + w.
sum[i - 1] 很明显是i - 1出现时所到达的位数, 那么开始生成i的时候,肯定是由sum[i - 1]这里开始的。
sum[i - 1] - sum[i - 2] + w就是从1 ~i所需要的位数, sum[i - 2] 为生成到i - 2所需要的个数,那么sum[i - 1] - sum[i - 2] 就为1 ~ i-1所需要的位数, 生成i - 1 和生成i只差了一个i,所以加上i的位数 就可以了。
2、num[i] = sum[i] - sum[i - 1],(num[i]为生成到i所需要的位数, 上面讲过了)
然后遍历一边sum数组, 找到第一个使得sum[i] >= tmp的i, 也就是说, tmp位的数是在生成1 ~i的过程中产生的数, 所以问题可以转换成找生成1 ~ i过程中的tmp - sum[i - 1]位。
接下来遍历一遍num数组,找到第一个i使得num[i] >= tmp的i, 也就是说, 处理过的tmp是在生成i的过程中产生的数,
输出tmp - num[i - 1]位与数i对应的位数值。
#include <stdio.h>
#include <stdlib.h>
const int N = 350000;
const int MAX = 2147483647;
const int w[] = {0, 10, 100, 1000, 10000, 100000}; int n = 2, num[N];
long long sum[N]; void init() {
sum[0] = num[0] = 0, sum[1] = num[1] = 1;
for (int cur = 1; sum[n - 1] < MAX; n++) {
if (n >= w[cur]) cur++;
sum[n] = sum[n - 1] * 2 - sum[n - 2] + cur;
num[n] = sum[n] - sum[n - 1];
}
} int main () {
init();
int cas, tmp, cur;
char str[10];
scanf("%d", &cas);
while (cas--) {
scanf("%d", &tmp);
for (cur = 1; cur < n; cur++)
if(tmp <= sum[cur]) break;
tmp -= sum[cur - 1];
for (cur = 1; cur < n; cur++)
if (tmp <= num[cur]) break;
tmp -= num[cur - 1];
sprintf(str, "%d", cur);
printf("%c\n", str[--tmp]);
}
return 0;
}
uva 10706 Number Sequence(数学规律)的更多相关文章
- UVA 10706 Number Sequence (找规律 + 打表 + 查找)
Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...
- UVa 10706 - Number Sequence
题目大意:Sk表示从1到k的字符序列,如S4为1234,现如今有如下的序列S1S2...Sk,形如1 12 123 1234这样的序列,给一个数n,让你去这个序列第n个位置上的数字. 可以构建出一个S ...
- PAT甲级——1104 Sum of Number Segments (数学规律、自动转型)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90486252 1104 Sum of Number Segmen ...
- 1005:Number Sequence(hdu,数学规律题)
Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...
- HDU1005 Number Sequence(找规律,周期是变化的)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1005 Number Sequence Time Limit: 2000/1000 MS (Java/O ...
- 递推:Number Sequence(mod找规律)
解题心得: 1.对于数据很大,很可怕,不可能用常规手段算出最后的值在进行mod的时候,可以思考找规律. 2.找规律时不必用手算(我傻,用手算了好久).直接先找前100项进行mod打一个表出来,直接看就 ...
- HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- UVA - 10689 Yet another Number Sequence 矩阵快速幂
Yet another Number Sequence Let’s define another number sequence, given by the foll ...
- 数学: HDU1005 Number Sequence
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- linux tee 命令详解
man tee: NAME tee - read from standard input and write to standard output and files SYNOPSIS tee [OP ...
- Kill 锁,1222:已超过了锁请求超时时段,
应该是你的表体积很大,处理的时候费事,因为几乎所有数据库操作都需要加或多或少的锁,所以会超时.首先你可以使用select * from sys.sysprocesses where blocked&l ...
- libeXosip2(3) -- SIP messages and call control API
SIP messages and call control API The SIP messages and call control API. More... Modules eXosip2 INV ...
- Putty server refused our key的解决方法
在使用putty工具使用密钥远程登陆CentOS系统时,出现Putty server refused our key提示,解决办法: 1.查看是否关掉SELINUX. 相关命令:getenforce, ...
- HDU 1402 A * B Problem Plus (FFT模板题)
FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...
- Mybatis 开发中遇见的异常及处理
1 异常信息: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bin ...
- poj 2456 Aggressive cows(二分搜索之最大化最小值)
Description Farmer John has built a <= N <= ,) stalls. The stalls are located along a straight ...
- mysql 中文乱码的解决方法
添加或修改my.ini 配置文件,设置编码字符为utf8 ,默认为latin1,见红色字体 [mysql]# 设置mysql客户端默认字符集default-character-set=utf8 [my ...
- text-overflow简单使用
text-overflow属性配合overflow才有效果,还记得把文字强制一行显示,如下代码: <!DOCTYPE html> <html lang="zh-cn&quo ...
- kafka-分布式消息系统
消息中间件MessageQuene 解耦且可扩展:业务复杂度的提升带来的也是耦合度的提高,消息队列在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一接口.这允许你独立的扩展或 ...