2002NOIP普及组真题 3. 产生数

线上OJ 地址:

【02NOIP普及组】产生数

核心思想:组合数 + dfs + 高精度

1、如果一个数字有 3 位,每位有 2种可能性,则数字的 组合数 为 2*2*2 = 8 种 。故,只要求出每一位数字有多少种变体即可。

求 0 ~ 9 每一个数字的变体数量,可使用dfs深搜,并将结果存储在对应的 c[i] 中
具体方法:对 0 ~ 9 每一个数字执行一次 dfs,统计该数字发生的变体数量(最终要加上自己,比如 2 →3,3 →5,则最终该位置有 3 种数字的变体(分别为3,5和自身2))

2、把输入的字符串转换成 int 数组
3、最终结果 = 每一位变体数量的乘积 。如 2*2*2 = 8 种

由于 n 能达到 1 0 30 10^{30} 1030,所以 n 的位数可达31位,每一位都有 [1 ~ 10] 种变体,所以 10*10*10… *10 就变成了高精度乘法(高精度✖️低精度)。

4、最后注意结果为逆序输出

void Multiply(int a[], int b)  // 高精乘低精 a[] * b 赋值给 a[]。 
{int t = 0, i;   // c存储进位 for(i = 1; i <= a[0]; ++i)  // 注意:a数组存储的是逆序{a[i] = a[i] * b + t;t = a[i] / 10;a[i] %= 10; }while(t > 0)  // 处理最后一次相乘产生的进位{a[i] = t % 10;t /= 10;i++;}while(a[i] == 0 && i > 1)  // 消除 a[] 的前导0 i--;a[0] = i; // a[0]存储 a数组长度 
}
题解代码:
#include<bits/stdc++.h>
using namespace std;const int K = 20;
const int N = 35;int k, cnt = 0, c[10]; 	// 用于存储 0~9 这10个数每个数可以变的次数。举例:1可以变为3和 5,则 c[1]=3;2可以变为6、7、8、9,则c[2]=5
int vis[10]; 	// 用于记录每个数字是否被访问过 
int x[K], y[K];	// 记录每次读进来的规则,举例:第一个规则是 2 →3,则 x[1]=2; y[1]=[3];   第二个规则是 3 →5,则 x[2]=3; y[2]=[5]void dfs(int a)
{for(int i = 1; i <= k; ++i){if(x[i] == a && vis[y[i]] == false){vis[y[i]] = true;cnt++; dfs(y[i]);}}
}void init()
{for(int i = 0; i <= 9; ++i){memset(vis, 0, sizeof(vis));//vis[j]:i能否通过应用某些规则变成数字j cnt = 0;			// cnt 用于记载当前数字可以转变为多少个数字。举例: 2 →3,   3 →5,则表示 2可以转变为 2个数字(3和5),故cnt为2 vis[i] = true;dfs(i);//标记vis 	// 在执行 dfs 时,cnt会不断增加 c[i] = cnt + 1;   	// 加上自身后,存储在该数字对应的数组下标中。举例: 2 →3,   3 →5,则最终该位置有 3 种数字的组合(分别为3,5和自身2) }
}void Multiply(int a[], int b)  // 高精乘低精 a * b 赋值给 a。 
{int t = 0, i;   // c存储进位 for(i = 1; i <= a[0]; ++i){a[i] = a[i] * b + t;t = a[i] / 10;a[i] %= 10; }while(t > 0){a[i] = t % 10;t /= 10;i++;}while(a[i] == 0 && i > 1)  // 消除前导0 i--;a[0] = i; // a[0]存储 a数组长度 
}int main()
{string s; cin >> s >> k;for(int i = 1; i <= k; ++i)   cin >> x[i] >> y[i];// 第一步:对 0~9 每一个数字执行一次 dfs,统计该数字发生的变体数量(最终要加上自己,比如 2 →3,3 →5,则最终该位置有 3 种数字的变体(分别为3,5和自身2)) init();		// 第二步:把输入的字符串转换成int数组	int a[N];			// 用于存储拆分的数字 a[0] = s.length();  // 输入数字的长度 for(int i = 1; i <= a[0]; i++)  a[i] = s[i-1] - '0'; // 第三步:最终结果 = 每一位变体数量的乘积  。如  2*2*2 = 8 种 int f[N];	// f[i]:前i位数字可以变换成的数字种类memset(f, 0, sizeof(f));f[0] = f[1] = 1;for(int i = 1; i <= a[0]; ++i)  Multiply(f, c[a[i]]);  // f * c[a[i]] 赋值回 f for(int i = f[0]; i >=1 ; i--)  cout << f[i];  // 逆序输出      return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 如何分布式部署

MySQL的分布式部署是一个涉及多个步骤和配置的过程&#xff0c;以确保数据库系统能够支持大规模数据存储、高并发访问和容错性。以下是MySQL分布式部署的主要步骤和要点&#xff0c;结合参考文章中的相关信息进行整理&#xff1a; 一、前期准备 环境准备&#xff1a; 选择合…

LLVM Cpu0 新后端 系列课程总结

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

AtCoder Beginner Contest 355

C - Bingo 2 题意 有一个 n n n\times n nn 的网格&#xff0c;初始全白&#xff0c;有 t t t 次操作&#xff0c;每次操作涂黑一个指定的格子。 问执行第几个操作后&#xff0c;有一行或一列或对角线的格子全部被涂黑。 思路 如果暴力判断&#xff0c;那么总时间复杂度…

一文搞懂线性回归模型

1、简单介绍 线性回归模型是一种基础的预测建模技术&#xff0c;用于分析一个或多个自变量&#xff08;特征&#xff09;与因变量&#xff08;目标&#xff09;之间的关系。它的基本假设是目标变量&#xff08;y&#xff09;与特征&#xff08;X&#xff09;之间存在线性关系。…

提升篇---接口和抽象类的本质区别

大家好&#xff0c;这里是教授.F 语法区别&#xff1a; 方法实现&#xff1a;接口中定义的方法默认都是抽象的&#xff0c;不包含方法的实现&#xff1b;而抽象类可以包含抽象方法和具体方法的实现。 多继承&#xff1a;一个类只能继承一个抽象类&#xff0c;但可以实现多个接…

测试与开发

目录 按照测试目标分类 界面测试 功能测试 性能测试 可靠性测试 安全性测试 易用性测试 按照执行方式分类&#xff1a; 测试方法 白盒测试 语句覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖 黑盒测试 灰盒测试 按照测试阶段分类 单元测试 集成测试 …

【iOS】界面推出的方法

【iOS】界面推出的方法 在学习过程中我们发现在iOS中有两种界面推出的方法&#xff1a;push 和 present这两种方法都可以用来推出一个新的界面 但是这两者是存在区别的 push 方法是通过 UINavigationController 进行导航,新的视图控制器会被压入导航栈中&#xff0c;可以跨级…

写给大数据开发,如何去掌握数据分析

这篇文章源于自己一个大数据开发&#xff0c;天天要做分析的事情&#xff0c;发现数据分析实在高大上很多&#xff0c;写代码和做汇报可真比不了。。。。 文章目录 1. 引言2. 数据分析的重要性2.1 技能对比2.2 业务理解的差距 3. 提升数据分析能力的方向4. 数据分析的系统过程4…

前端 JS 经典:Promise 详解

1. Promise 由来 在以前我们实现异步是用的回调函数&#xff0c;当一个异步请求需要依赖上一个异步请求返回的结果的时候&#xff0c;就会形成如下这种的调用结构。 请求1(function (结果1) {请求2(function (结果2) {请求3(function(结果3)) {请求4(function(结果4) {})}});…

Windows下载安装RabbitMQ客户端(2024最新篇)

文章目录 RabbitMQ认知RabbitMQ下载RabbitMQ安装 更多相关内容可查看 RabbitMQ认知 定义&#xff1a;RabbitMQ是一个消息中间件&#xff0c;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递…

2024年土建施工员考试题库及答案

一、单选题 1.某工程项目桩基工程采用套管成孔灌注桩&#xff0c;为了保证施工质量&#xff0c;桩管灌满混凝土后开始拔管&#xff0c;按照规定&#xff0c;管内应保持不少于&#xff08;&#xff09;m高的混凝土。 A.1 B.1.5 C.2 D.2.5 答案&#xff1a;C 解析&…

免费!GPT-4o发布,实时语音视频丝滑交互

We’re announcing GPT-4o, our new flagship model that can reason across audio, vision, and text in real time. 5月14日凌晨&#xff0c;OpenAI召开了春季发布会&#xff0c;发布会上公布了新一代旗舰型生成式人工智能大模型【GPT-4o】&#xff0c;并表示该模型对所有免费…

JDBC简介以及快速入门

这些都是JDBC提供的API 简介 每一个数据库的底层细节都不一样 不可能用一套代码操作所有数据库 我们通过JDBC可以操作所有的数据库 JDBC是一套接口 我们自己定义了实现类 定义实现类 然后就能用Java操作自己的数据库了 MySQL对于JDBC的实现类 就是驱动 快速入门 创建新的项…

MySQL-函数/约束

MySQL-函数 distinct-去重 //放在select后 1、字符串函数 SELECT 函数(参数) CONCAT(S1,S2,S3...)-字符串拼接&#xff0c;拼接成一个字符串。 LOWER(str)-将字符串str全部转换为小写。 UPPER(str)-将字符串str全部转换为大写。 LPAD(str,n,pad)-左填充&#xff0c;用字…

vscode copilot git commit 生成效果太差,用其他模型替换

问题 众所周知&#xff0c;copilot git commit 就像在随机生成 git commit 这种较为复杂的内容还是交给大模型做比较合适 方法 刚好&#xff0c;gitlens 最近开发了 AI commit的功能&#xff0c;其提供配置url api可以实现自定义模型 gitlens 只有3种模型可用&#xff1a…

【Python】在【数据挖掘】与【机器学习】中的应用:从基础到【AI大模型】

目录 &#x1f497;一、Python在数据挖掘中的应用&#x1f495; &#x1f496;1.1 数据预处理&#x1f49e; &#x1f496;1.2 特征工程&#x1f495; &#x1f497;二、Python在机器学习中的应用&#x1f495; &#x1f496;2.1 监督学习&#x1f49e; &#x1f496;2.2…

树二叉树

树 ​ 树是 n&#xff08;n≥0&#xff09;个结点的有限集。当 n 0时&#xff0c;称为空树。在任意一颗非空树中应满足&#xff1a; &#xff08;1&#xff09;有且仅有一个特定的称为根的结点。 &#xff08;2&#xff09;当 n > 1时&#xff0c;其余结点可分为 m&…

基于小波的多元信号降噪-基于马氏距离和EDF统计(MATLAB R2018a)

马氏距离是度量学习中一种常用的距离指标&#xff0c;通常被用作评定数据样本间的相似度&#xff0c;可以应对高维线性分布数据中各维度间非独立同分布的问题&#xff0c;计算方法如下。 &#xff08;1&#xff09;计算样本向量的平均值。 &#xff08;2&#xff09;计算样本向…

Golang:malformed module path “xxx“: missing dot in first path element

首先&#xff0c;这个问题往往是在golang中引入自己创建的包时发生的错误。解决方案如下 解决方案1: 检查被引入包下是否存在go.mod,因为你首先要保证你引入的是一个模块&#xff0c;而不只是一个文件夹&#xff0c;类似python包下init.py。因此&#xff0c;一个列子如下&…

Golang的协程调度器GMP

目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器&#xff0c;它包含了运行协程的资源&#xff0c;如果线程想运行协程&#xff0c;必须先获取P&#xff0c;P中还包含了可运行的G…