cf 1216e1

news/2024/11/17 21:27:27/

https://codeforc.es/problemset/problem/1216/E1

 

求1121231234...序列里面第k个数字,k不超过10亿。 

我们只要预处理一个sum数组,然后每次二分一下(其实不二分也可以) 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int const inf = 1e9;
 4 int q, sum[100000], pw[10];
 5 int num(int x)
 6 {
 7     int res = 0;
 8     while (x)
 9     {
10         x /= 10;
11         res++;
12     }
13     return res;
14 }
15 int query(int t, int x)
16 {
17     while (1)
18     {
19         x--;
20         if (x == 0)
21             return t % 10;
22         t /= 10;
23     }
24 }
25 int main()
26 {
27     scanf("%d", &q);
28     int s = 0, n;
29     pw[0] = 1;
30     for (int i = 1; i < 10; i++)
31         pw[i] = pw[i - 1] * 10;
32     for (int i = 1;; i++)
33     {
34         s += num(i);
35         sum[i] = sum[i - 1] + s;
36         if (sum[i] >= inf)
37         {
38             n = i;
39             break;
40         }
41     }
42     while (q--)
43     {
44         int x;
45         scanf("%d", &x);
46         int l = 1, r = n;
47         while (l < r)
48         {
49             int mid = (l + r) / 2;
50             if (sum[mid] >= x)
51                 r = mid;
52             else
53                 l = mid + 1;
54         }
55         x -= sum[r - 1];
56         for (int i = 1; i < 10; i++)
57         {
58             int tmp = (pw[i] - pw[i - 1]) * i;
59             if (x > tmp)
60                 x -= tmp;
61             else
62             {
63                 int t = pw[i - 1] + (x - 1) / i;
64                 x = (x - 1) % i + 1;
65                 printf("%d\n", query(t, i - x + 1));
66                 break;
67             }
68         }
69     }
70     return 0;
71 }
View Code

 

转载于:https://www.cnblogs.com/ZJXXCN/p/11600872.html


http://www.ppmy.cn/news/167108.html

相关文章

信息学奥赛一本通1216:红与黑题解

【题目描述】 有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻的黑色瓷砖移动。请写一个程序&#xff0c;计算你总共能够到达多少块黑色的瓷砖。 【输入】 包括多组数据。每组数据的第一行是两个…

cf 1216c

https://codeforc.es/problemset/problem/1216/C 判断一个矩形是否被另外两个矩形完全覆盖&#xff0c;这题是我是用离散化的方法来做的。 1 #include<bits/stdc.h>2 using namespace std; 3 int x[7],y[7],tx[7],ty[7]; 4 int inner(int x1,int y1,int x2,int…

cf 1216f

https://codeforc.es/problemset/problem/1216/F 有直线上n个位置&#xff0c;每个位置上可以花费i的代价使得联网&#xff0c;某些位置可以放置路由器&#xff0c;放路由器的代价也是i&#xff0c;放置了路由器以后&#xff0c;可以让[i-k,ik]的范围内上网&#xff0c;要求每台…

hdu 1216

主题思想&#xff1a; 简单模拟&#xff0c;打表 先执行一遍&#xff0c;算出第3000个数的大小&#xff0c;然后&#xff0c;以第3000个数&#xff0c;为上限&#xff0c;申请数组空间&#xff0c;和执行初始化&#xff0c;最后AC #include <iostream> #include<cst…

洛谷P1216数字三角形 ——动态规划

题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从 7→3→8→7→5 的路径产生…

css定位 1216

定位的分类 static relative absolute fixedstatic 标准的 默认的 默认的定位&#xff0c;没有偏移效果 除了它外的所有其它定位&#xff0c;都会具有偏移的能力 relative 相对定位 特点&#xff1a; 偏移参考&#xff0c;以自身为参考 原来的位置&#xff0c;占据文档流…

Lightoj 1216

题目链接&#xff1a;点这里 题意&#xff1a;求水杯中水的体积。 思路&#xff1a;推公式。 我猜的ABC和ADE相似&#xff08;但是不知道证明&#xff09;&#xff0c;可以求出水的另一底面半径。 &#xff08;路过大牛知道怎么证明或者知道我的是错的一定给提出来啊。&…

洛谷P1216 2022.5.22 13:29

C&#xff1a;&#xff08;100分&#xff09; 我理解的大概原理&#xff1a; 题目&#xff1a;“从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大” 也就是找下面其中的一条路线&#xff0c;然后把这条路线上的所有数加起来&#xff0c;找到和数最大的那…