POJ-1019 Number Sequence(思维题)
来源:互联网 发布:plc编程功能块 编辑:程序博客网 时间:2024/06/06 01:31
题意:
有一个序列:11212312341234512345612345671234567812345678912345678910...
给定一个数n,求序列的第n个数的值。
思路:
以每一个递增序列为一段进行预处理,num[i]存储该段内数字的个数,然后求一个前缀和,输入n后找到第一个>=n的前缀和位置k,然后暴力从1搜到k寻找答案。
代码:
#include <algorithm>#include <cstdio>#define LL long longusing namespace std;const int maxn = 50005;const LL UP = 2.2e9;LL num[maxn], sum[maxn];int cnt, wei[15];inline void init(){LL up = 0, pre = 0, x = 0, cut = 0; cnt = 0;int flag = 0;for(int k = 1; k <= 9; ++k){cut = x;x = x*10+9;LL xx = x-cut;for(int i = 1; i <= xx; ++i){up += pre+i*k;num[++cnt] = pre+i*k;if(up >= UP){flag = 1; break;}}if(flag) break;pre += (x-x/10)*k;}sum[0] = 0; sum[1] = num[1];for(int i = 1; i <= cnt; ++i) sum[i] = sum[i-1]+num[i];}int main(){init();int t, n, k, flag;scanf("%d", &t);while(t--){scanf("%d", &n);for(k = 1; k <= cnt; ++k)if(n <= sum[k]) break;n -= sum[k-1]; flag = 0;for(int i = 1; i <= k; ++i){int t = i, j = 0;while(t){wei[++j] = t%10;t /= 10;}for(int l = j; l >= 1; --l){--n;if(n == 0){flag = 1;printf("%d\n", wei[l]);break;}}if(flag) break;}}return 0;}
继续加油~
阅读全文
1 0
- POJ-1019 Number Sequence(思维题)
- poj 1019 Number Sequence 找规律 思维题 ()
- poj-1019-Number Sequence【思维】【规律】
- Number Sequence(思维题)
- POJ 1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- poj 1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- POJ-1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- poj 1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- POJ 1019 Number Sequence
- POJ 1019 Number Sequence
- pro JPA2 精通java持久化API 第五章
- Executor, ExecutorService 和 Executors 间的不同
- 三分初体验
- Tempter of the Bone
- MVP与MVC优缺点以及解决方法
- POJ-1019 Number Sequence(思维题)
- 简单叙述服务端如何维护一个session
- 【Java并发编程】原子变量
- Java Swing:进度条字体颜色修改
- MySQL+DBUtils+C3P0+ Servlet+HTML完成Web端登陆验证案例实现
- 如何阅读caffe源码
- Python Algorithms Learning Notes(1)--Asymptotic Notations
- linux下pip使用可能遇到的问题
- C++多态,虚函数作用及底层实现原理