Problem F
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 90 Accepted Submission(s) : 6
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
S1 = 1
S2 = 12
S3 = 123
S4 = 1234
.........
S9 = 123456789
S10 = 1234567891
S11 = 12345678912
............
S18 = 123456789123456789
..................
现在我们把所有的串连接起来
S = 1121231234.......123456789123456789112345
那么你能告诉我在S串中的第N个数字是多少吗?
Input
接下来的K行每行有一个整数N(1 <= N < 2^31)。
Output
Sample Input
6 1 2 3 4 5 10
Sample Output
1 1 2 1 2 4
思路:关键是在处理查询的时候 不能用遍历搜索 否则会超时 应该采用二分搜索 简化查询的时间
先打表 标记在s中第几位应该属于第几个Si 例如 第2位 应该属于s2
用 a[i] 数组 标记 a[i] 代表si 的最后一位 是在 s字符串中的第几位
则有 规律 a[i]=a[i-1]+i
然后 n=n-a[i-1];
ps 当ans为0 时 ans应为 9
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
__int64 p,q,a[75001];
void quer(__int64 n)
{
}
int main()
{
//
}