T271298 [CoE R5] 暴龙的白菜

[CoE R5] 暴龙的白菜

题目背景

暴龙爱吃白菜。

题目描述

给定一个字符串,由 1122334455667788991010……以此类推,依次拼接而成。

询问字符串第 l 位到第 r 位的数字之和。

输入格式

输入包含多组测试数据。

第一行一个正整数 T

接下来 T 组问询,每次两个正整数 l,r

输出格式

T 行,每行一个整数代表答案。

样例 #1

样例输入 #1

4
5 9
46 50
114 514
19 19810

样例输出 #1

18
3
1134
74924

提示

样例解释

字符串为:

12233344445555566666677777778888888899999999910101010101010101010

对于第一组询问,第 5 位到第 9 位的数字之和为 3+3+4+4+4=18

对于第二组询问,第 46 位到第 50 位的数字之和为 1+0+1+0+1=3


数据范围

本题采用捆绑测试。

  • Subtask 1(10 pts):T=11lr10
  • Subtask 2(20 pts):1T101lr103
  • Subtask 3(30 pts):1T1031lr105
  • Subtask 4(40 pts):无特殊限制。

对于 100% 的数据,满足 1T1051lr106

思路

直接暴力获得拼得字符串,再用前缀和O(1)查询。

代码

#include <iostream>
using namespace std;
const int N = 1000010;
string s = "";
int sum[N];
int get (int x) {
	int t = 0;
	while (x > 0) t++,x /= 10;
	return t;
}
int main () {
	int cnt = 0;
	for (int i = 1;cnt <= 1000000;i++) {
		for (int j = 1;j <= i && cnt <= 1000000;j++) s += to_string (i),cnt += get (i);  //暴力
	}
	for (int i = 1;i <= 1000000;i++) sum[i] = sum[i - 1] + s[i - 1] - '0';
	int T;
	cin >> T;
	while (T--) {
		int l,r;
		cin >> l >> r;
		cout << sum[r] - sum[l - 1] << endl;  //前缀和
	}
	return 0;
}
posted @   incra  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示