首页 > 其他分享 >Acwing 338 技术问题

Acwing 338 技术问题

时间:2024-10-19 22:22:12浏览次数:1  
标签:10 338 int 技术 vector solve ans cu Acwing


/*
https://www.acwing.com/problem/content/340/

给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。
例如,a=1024,b=1032,则 a 和 b 之间共有 9 个数如下:
1024 1025 1026 1027 1028 1029 1030 1031 1032
其中 0 出现 10 次,1 出现 10 次,2 出现 7 次,3 出现 3 次等等…

输入格式
输入包含多组测试数据。

每组测试数据占一行,包含两个整数 a 和 b。
当读入一行为 0 0 时,表示输入终止,且该行不作处理。

输出格式
每组数据输出一个结果,每个结果占一行。
每个结果包含十个用空格隔开的数字,第一个数字表示 0 出现的次数,第二个数字表示 1 出现的次数,以此类推。

数据范围
0<a,b<100000000

输入样例:
1 10
44 497
346 542
1199 1748
1496 1403
1004 503
1714 190
1317 854
1976 494
1001 1960
0 0
输出样例:
1 2 1 1 1 1 1 1 1 1
85 185 185 185 190 96 96 96 95 93
40 40 40 93 136 82 40 40 40 40
115 666 215 215 214 205 205 154 105 106
16 113 19 20 114 20 20 19 19 16
107 105 100 101 101 197 200 200 200 200
413 1133 503 503 503 502 502 417 402 412
196 512 186 104 87 93 97 97 142 196
398 1375 398 398 405 499 499 495 488 471
294 1256 296 296 296 296 287 286 286 247
*/

#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

const int N = 10;
int f[N][N][N];
int g[N][N][N];
int l, r;


void init() {
	for (int i = 0; i <= 9; i++) {
		f[0][i][i] = 1;
		g[0][i][i] = 1;
	}
	//g[0][0][0] = 0;

	for (int x = 1; x <= 9; x++) {
		for (int i = 0; i <= 9; i++) {
			for (int j = 0; j <= 9; j++) {
				for (int k = 0; k <= 9; k++) {
					f[x][i][j] += f[x - 1][k][j];
				}
				if (i == j) {
					f[x][i][j] += pow(10,x);
				}
			}
		}
	}

	for (int x = 1; x <= 9; x++) {
		for (int i = 0; i <= 9; i++) {
			for (int j = 0; j <= 9; j++) {
				for (int k = 0; k <= 9; k++) {
					if (x == 1 && i == 0 && j == 0) {
						int d = 9;
					}
					if (i == 0) {
						g[x][i][j] += g[x-1][k][j];
					}
					else {
						g[x][i][j] += f[x - 1][k][j];
					}
				}
				if (i == j&& i!=0) {
					g[x][i][j] += pow(10, x);
				}
			}
		}
	}


	return ;
}

vector<int> solve(int u) {
	vector<int> v; int cu = u;
	while (cu != 0) {
		int t = cu % 10;
		cu /= 10;
		v.push_back(t);
	}
	vector<int> ans(10, 0);
	if (u == 0) { ans[0] = 1; return ans; }
	for (int i = v.size() - 1; i >= 0; i--) {
		int t = v[i];
		for (int x = 0; x < t; x++) {
			for (int j = 0; j <= 9; j++) {
				if (j == 0) {
					if (i == v.size() - 1) {
						ans[j] += g[i][x][j];
					}
					else {
						ans[j] += f[i][x][j];
					}
				}
				else {
					ans[j] += g[i][x][j];
				}
				 
			}
		}

		//t
		if (i >= 0) {
			u -= t * pow(10, i);
			ans[t] += u + 1;
		}
	}

	return ans;
}


int main()
{
	init();

	while (cin >> l >> r) {
		if (l == 0 || r == 0) break;
		if (r < l) swap(l, r);
		vector<int> a = solve(r);
		vector<int> b =solve(l-1);

		for (int i = 0; i <= 9; i++) {
			cout << a[i]-b[i] << " ";
		}
		cout << endl;
	}
}

标签:10,338,int,技术,vector,solve,ans,cu,Acwing
From: https://www.cnblogs.com/itdef/p/18486674

相关文章

  • 21、【实战中提升自己】内网安全部署之STP的安全技术部署
     0 特别说明       之前博客分享过,但是没汇总到公众号,这里在发布下,虽然早期写的实战文章,有些技术、设备、配置代码现在更新了,但是对于常见的组网思路构建还是很有帮助的,希望对大家有帮助。(觉得有帮助可以点点赞、转发下) 11拓扑        有朋友说拓扑......
  • 20222416 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1.实验内容1.1内容总结后门:特指潜伏于操作系统中专门做后门的一个程序,“坏人”可以连接这个程序,远程执行各种指令。概念和木马有重叠。netcat:一个底层工具,进行基本的TCPUDP数据收发。常被与其他工具结合使用,起到后门的作用。Meterpreter:一个能生成后门程序的平台,也有很多别......
  • 机器的“眼睛“:计算机视觉技术背后的魔法
    计算机视觉,作为人工智能领域中的一颗璀璨明珠,正逐步改变着我们的生活方式。它赋予了机器“看”的能力,使得计算机能够从图像和视频中提取信息并进行分析,就像人类用眼睛和大脑来理解世界一样。本文将带你走进计算机视觉的世界,揭开这项技术背后的神奇魔法。1.什么是计算机视......
  • 外包干了2个月,技术明显退步
    回望过去,我是一名普通的本科生,于2019年通过校招有幸加入了南京某知名软件公司。那时的我,满怀着对未来的憧憬和热情,投入到了功能测试的岗位中。日复一日,年复一年,转眼间,我已经在这个岗位上度过了接近两年的时光。然而,随着时间的推移,我逐渐发现,这份看似稳定的工作,其实正在悄然吞......
  • 20222403 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    |1.实验内容1.1实践目标(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)(2)使用socat获取主机操作Shell,任务计划启动(3)使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell(4)使用MSFmeterpreter(或其他软件)生成获取目标......
  • 20222413 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1.实验内容本周学习的主要内容为缓冲区溢出的shellcode技术,及其RNS、NSR、RS三种缓冲区溢出技术。此外,我还学习了在Linux系统和Windows系统中缓冲区溢出的实例和防范方法。在实验过程中,我初步了解并实践实现了后门原理,能够使用工具生成后门入侵控制其他主机。2.实验目标(1)使用......
  • acwing第二章算法模板
    17、单链表//head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点inthead,e[N],ne[N],idx;//初始化voidinit(){    head=-1;    idx=0;}//在链表头插入一个数avoidinsert(inta){    e[idx]=a,ne[idx]=......
  • acwing第三章算法模板
    29、树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b,b->a。因此我们可以只考虑有向图的存储。(1)邻接矩阵:g[a][b]存储边a->b(2)邻接表://对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int......
  • 【Python技术之Django精品教学】第11课--Python Django 迁移
    PythonDjango迁移没有这样的表?-product/models.py中定义的类仅仅是我们的数据库的概念,但它并没有在数据库中创建任何表。我们可以认为类Phone是概念性的模式。在创建任何表之前,如果我们试图访问创建前的表,它将抛出这样的错误。OperationalErrorat/admin/product/phone/......
  • 【Python技术之Django精品教学】第13课--Django模型集–2
    Django模型集–2模型字段–模型字段定义了将被存储在所提供的变量中的数据类型。要存储价格,整数类型更适合。要存储高度、长度等,浮动/十进制类型更合适。要存储标题或标题,最好是提供字符限制。对于写一篇文章,最好有一个没有字符限制的文本框。示例:Price=models.Integer......