HDOJ1597 find the nth digit(二分)
2015-08-02 19:31
1051 查看
Problem Description
假设:
S1 = 1
S2 = 12
S3 = 123
S4 = 1234
.........
S9 = 123456789
S10 = 1234567891
S11 = 12345678912
............
S18 = 123456789123456789
..................
现在我们把所有的串连接起来
S = 1121231234.......123456789123456789112345678912.........
那么你能告诉我在S串中的第N个数字是多少吗?
Input
输入首先是一个数字K,代表有K次询问。
接下来的K行每行有一个整数N(1 <= N < 2^31)。
Output
对于每个N,输出S中第N个对应的数字.
Sample Input
Sample Output
AC代码:
1.二分
2.脑洞
假设:
S1 = 1
S2 = 12
S3 = 123
S4 = 1234
.........
S9 = 123456789
S10 = 1234567891
S11 = 12345678912
............
S18 = 123456789123456789
..................
现在我们把所有的串连接起来
S = 1121231234.......123456789123456789112345678912.........
那么你能告诉我在S串中的第N个数字是多少吗?
Input
输入首先是一个数字K,代表有K次询问。
接下来的K行每行有一个整数N(1 <= N < 2^31)。
Output
对于每个N,输出S中第N个对应的数字.
Sample Input
6 1 2 3 4 5 10
Sample Output
1 1 2 1 2 4
AC代码:
1.二分
#include "iostream" #include "cstdio" #include "cstring" #include "algorithm" #include "cstdlib" using namespace std; typedef long long ll; ll n, w, a[66666]; void search(int l, int r) { int m = (l + r) / 2; if(a[m] < n && a[m + 1] >= n) { w = m; return ; } if(a[m] >= n) search(l, m - 1); if(a[m + 1] < n) search(m + 1, r); } int main(int argc, char const *argv[]) { int t, ans; for(int i = 1; i <= 66000; ++i) a[i] = a[i - 1] + i; cin >> t; while(t--) { cin >> n; w = -1; search(1, 65536); ans = n - a[w]; ans %= 9; if(!ans) ans = 9; cout << ans << endl; } return 0; }
2.脑洞
#include "iostream" #include "cstdio" #include "cstring" #include "algorithm" #include "cstdlib" using namespace std; typedef long long ll; int main(int argc, char const *argv[]) { int t, n; cin >> t; while(t--) { cin >> n; int a = 1; while(n > a) { n -= a; a++; } n %= 9; if(!n) n = 9; cout << n << endl; } return 0; }
相关文章推荐
- Remove Duplicates from Sorted Array
- suse下用zypper安装的vim插件路径
- Remove Element
- Linux系统FTP文件传输服务
- while
- Java类加载器总结
- 素数环(UVa 524)
- poj 3468 线段树+懒标记
- Android实例-路径信息及文件和文件夹的操作(XE8+小米2)
- GitHub 的简单使用
- 煎饼侠
- 乘法逆元的作用
- Being a Good Boy in Spring Festival HDOJ (尼姆博弈)
- Implement Trie (Prefix Tree) -- leetcode
- 字串的循环旋转
- Box2D C++教程 第三节:Testbed结构
- 【HDOJ 2147】 kiki's game
- UVALive 6661 解题心得
- Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现
- L-BFGS算法(有限内存BFGS算法)