第十三届蓝桥杯C++B组国赛D题——最大数字(AC)
目录
- 1.最大数字
- 1.问题描述
- 2.输入格式
- 3.输出格式
- 4.样例输入
- 5.样例输出
- 6.数据范围
- 7.原题链接
- 2.解题思路
- 3.模板代码
1.最大数字
1.问题描述
给定一个正整数 NNN 。你可以对 NNN 的任意一位数字执行任意次以下 2 种操 作:
将该位数字加 1 。如果该位数字已经是 9 , 加 1 之后变成 0 。
将该位数字减 1 。如果该位数字已经是 0 , 减 1 之后变成 9 。
你现在总共可以执行 1 号操作不超过 AAA 次, 2 号操作不超过 BBB 次。 请问你最大可以将 NNN 变成多少?
2.输入格式
第一行包含 3 个整数: N,A,BN, A, BN,A,B
3.输出格式
一个整数代表答案。
4.样例输入
123 1 2
5.样例输出
933
6.数据范围
对于30%30\%30% 的数据, 1≤N≤100;1 \leq N \leq 100;1≤N≤100;0≤A,B≤100 \leq A, B \leq 100≤A,B≤10。
对于 100%100 \%100% 的数据, 1≤N≤1017;0≤A,B≤1001 \leq N \leq 10^{17} ; 0 \leq A, B \leq 1001≤N≤1017;0≤A,B≤100
7.原题链接
最大数字
2.解题思路
看上去NNN的范围貌似很大,达到了1e17
的范围,但其实我们最多只需要考虑这最多17
位数,所以可以想到爆搜得到答案。
一个数的大小是从左到右依次判断,所以我们从最左边开始枚举,我们无需关注后面的数,要利用自己的1
号操作和2
号操作保证当前这个数位的数一定要尽可能最大
然后分别考虑两种操作,首先两种操作不可能混用,因为它们是抵消的效果,所以要么对这个数全使用1
操作,要么2
操作。假设某个数位的值为x
,首先考虑1
号操作,使用后可以让该数位变大,出于贪心考虑,我们想让它变成9
,那么需要进行9-x
次1
号操作,当然可能此时1
号操作并不足以让我们将x
变成9
,但我们还是使用剩余的全部的次数将其变大,所以每次考虑1
号操作应该使用的操作数t
应该为t=min(n,9-x)
,此时x
将变为x+t
,然后进行下一位的判断。
其次我们考虑2
号操作,这个的判断比较简单,它是让某个值减小,唯一能让某个数变大的机会就是将其减到0
后再减就会变成9
。那么这样操作需要的次数就是x+1
,如果操作次数不够,那我们宁愿不使用,因为这只会让这个数位变得更小。
在深搜dfs
的过程中,参数记录遍历到第几个数位以及此时累计的和,当搜索完所有数位后,将此时的和与答案进行一个取max
,最后的值则为答案。
3.模板代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;char c[20];
LL ans=0;
//n:1号操作剩余次数 m:2号操作剩余次数
int n,m;
void dfs(int i,LL v){int x=c[i]-'0';if(c[i]){//应该使用的操作次数int t=min(n,9-x);n-=t;dfs(i+1,v*10+x+t);//回溯n+=t;//考虑操作2是否能够使用if(m>x){m-=x+1;dfs(i+1,v*10+9);//回溯m+=x+1;}}else{//答案取maxans=max(ans,v);}
}
int main()
{scanf("%s%d%d",c,&n,&m);dfs(0,0);printf("%lld\n",ans);return 0;
}
第十三届蓝桥杯C++B组国赛D题——最大数字(AC)相关推荐
- 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组国赛真题解析
前言 省赛真题解析见: 2022年第十三届蓝桥杯Web大学组省赛真题解析(完整版) 2022年第十三届蓝桥杯Web大学组省赛真题解析(精华版) 更多蓝桥杯题解请查阅专栏:蓝桥杯 之前写省赛解析时篇幅过 ...
- 第十三届蓝桥杯C++B组国赛I题——齿轮 (AC)
目录 1.齿轮 1.题目描述 2.输入格式 3.输出格式 4.样例输入 5.样例输出 6.样例说明 6.数据范围 7.原题链接 2.解题思路 3.Ac_code 1.齿轮 1.题目描述 这天, 小明在 ...
- 第十三届蓝桥杯C++B组国赛E题——出差 (AC)
CSDN话题挑战赛第2期 参赛话题: 目录 1.出差 1.问题描述 2.输入格式 3.输出格式 4.样例输入 5.样例输出 6.样例说明 7.数据范围 8.原题链接 2.解题思路 3.模板代码 1.出 ...
- 【第十三届蓝桥杯C++ B组省赛编程题详解】
第十三届蓝桥杯C++ B组省赛编程题详解 第一题:刷题统计 题目描述 [Tag:枚举] 小明决定从下周一开始努力刷题准备蓝桥杯竞赛. 他计划周一至周五每天做a道题目,周六和周日每天做b道题目. 请你帮 ...
- 第十三届蓝桥杯Python B组国赛题解
第十三届蓝桥杯Python B组国赛题解 试题A:斐波那契与7 试题 B: 小蓝做实验 试题 C: 取模 试题 D: 内存空间 试题 E: 近似 GCD 试题 F: 交通信号 试题 G: 点亮 试题 ...
- 第十三届蓝桥杯c++b组国赛决赛
第一次参加蓝桥杯进国赛了,今天更新一下参加国赛的心得和写出的题吧~ 试题 A: 2022 思路:这题用的是三维背包,定义f[i][j][v]表示从前i个中选j个和为v的方案种数,那么可以得到状态转移方 ...
- 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组省赛真题解析(精华版)
- 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组省赛真题解析(完整版)
- 【第十二届蓝桥杯国赛真题】2021年第12届蓝桥杯JAVA B组国赛真题
最新文章
- 二叉树结点地址小错误
- 与女儿谈商业模式 (3):沃尔玛的成功模式
- 随机森林之oob error 估计
- 如何控制订单发料后不能删除组件
- setup.s 解读——Linux-0.11 剖析笔记(三)
- java需要先安装jdk_谢谢知乎。Java初学者首先下载 JDK 开发环境,然后再下 eclipse 对吗?那 tomcat是什么?还需要安装吗?...
- linux nginx 503,GitLab网页500/502/503错误–Nginx无法启动问题排查
- 程序员未来的职业生涯路该怎么走,如何避免35岁中年危机?
- 数据库(4)表的基本操作
- 我的docker随笔18:阿里云docker仓库的使用
- 关于 redis crackit 安全事件分析
- 技术解读Rainbond ServiceMesh微服务架构_开源PaaS Rainbond
- 用变量a给出下面的定义
- PHP自定义数组转Json字符串函数
- php反射机制详解,PHP反射机制
- 利用格林函数解泊松方程
- 中职计算机课应用的内容,信息技术手段在中职学校计算机课程教学中的应用
- NMS(非极大值抑制)
- 世界三大数字电视标准简介
- 计算机网络跳槽自荐信,计算机网络应用专业求职自荐信范文
热门文章
- 从零开始写第一个Android应用程序
- linux java -cp lt; .txt_补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能...
- matlab求时频分布图,Matlab时频分析TFD程序集(时频分布、chirplet分解、变形分数傅立叶变换)源代码...
- 均值归一化_深度神经网络中的归一化技术
- Python Crash Course读书笔记 - 第18章:GETTING STARTED WITH DJANGO
- 计算机网络-cisco选择题
- ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly
- centos yum清华镜像
- 【土旦】vue项目中 使用 pako.js 解密 gzip加密字符串
- 巴别鱼雏形,谷歌推出端到端语音翻译技术,还能模仿你说话