【C/C++】【NOI】雇佣兵代码及分析理解
目录
题目
代码
分析
题目
37:雇佣兵
总时间限制:
1000ms
内存限制:
65536kB
描述
雇佣兵的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素。
当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,雇佣兵每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力。
一个战斗期结束后,雇佣兵需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。
请问:雇佣兵的战斗力最大可以到达多少。
输入:
一行包括三个整数M、N、X,相邻两个整数之间用单个空格隔开。M、N、X均为不超过10000的正整数。
输出:
输出一个整数,为雇佣兵的最大战斗力。
样例输入
5 2 10
样例输出
6
代码
#include<iostream>
using namespace std;
int main() {int M,N,X,S = 0;cin>>M>>N>>X;while(X) {X--;S+=N;if(S >= M) {S = M;while(S) {if(S % N == 0) N++;S--;}}}cout<<N<<endl;return 0;
}
分析
// M:最大体力值
// N:战斗力
// X:能量元素
// S:(初始)体力值
#include<iostream>
using namespace std;
int main() {int M,N,X,S = 0;cin>>M>>N>>X;while(X) {// X > 0X--;// 每使用1个能量元素 S += N;// 体力值就 增加 Nif(S >= M) {S = M;// 当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,// while(S){……} 是正在进行一个战斗期 while(S) { // S > 0 if(S % N == 0)// 雇佣兵每连续战斗n天,战斗力就会上升1点N++;S--;// 战斗期结束体力值将为0}}}cout<<N<<endl;return 0;
}
本题很容易被忽视的一句话就是“每个能量元素恢复的体力值不超过当前的战斗力。”
这句话的意思是:
1个能量元素可以补充 最少1个,最多N个体力值。(【1,N】)
换句话说,1个能量元素可以补充多个体力值,而不是1个能量元素就补充1个体力值。
题目要求战斗力最大化,那么每个能量元素就肯定也要最大化利用,
也就是说1个能量元素最好能补充N个体力值,
于是补充体力时,每使用1个能量元素 ,体力值就增加 N。
X--;// 每使用1个能量元素
S += N;// 体力值就 增加 N
但是这里存在一个问题,
比如说当最大体力值M=5,战斗力N=2,能量元素X=10 ,
那么使用3个能量元素X之后,体力值S就是6。
而题目中要求“当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期”,
所以6其实是不符合条件的。
使用第3个能量元素时,补充的体力值应该调整为1,而非2,才能使体力值S恰好为5。
但是程序不会这么机灵,于是我们可以这样写:
if(S >= M) {
S = M;
……
}
当体力值S≥最大体力值M(6≥5)时,将M赋值给S,使体力值S=5,
相当于使用第3个能量元素时,只补充了1个体力值。
本题思路不唯一,个人认为这个思路更好理解。
如有不足或不解之处欢迎评论留言~
如果帮助可以点赞收藏一波嘛?谢谢啦~
【C/C++】【NOI】雇佣兵代码及分析理解相关推荐
- NOI 雇佣兵讲解(c/c++)
NOI 雇佣兵 例题 描述 雇佣兵的体力最大值为M,初始体力值为0.战斗力为N.拥有X个能量元素. 当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0.在同一个战斗期内 ...
- 《最新开源 随插即用》SAM 自增强注意力深度解读与实践(附代码及分析)
写在前面 大家好,我是cv君,前段时间忙碌工作,许久没更新,越发觉得对不起csdn的读者们,决定继续加油保持更新,保持一周2-3篇的高频率和高质量文章更新:论文分析.代码讲解.代码实操和训练.优化部署 ...
- 【机器学习】机器学习在爱奇艺视频分析理解中的实践
原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...
- 初学者复现CornerNet:详细指导零基础在Ubuntu系统运行该代码并完全理解论文思路的教程
本篇博客将从CornerNet的内容介绍开始,详细介绍其代码复现.指出一些常见问题.如何理解代码中的诸多文件夹以及一些常见的改进,CornerNet的学习入门仅此一篇即可--阿波,更新于2020.4. ...
- [论文阅读] (20)USENIXSec21 DeepReflect:通过二进制重构发现恶意行为(恶意代码ROI分析经典)
<娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...
- 大规模机器学习在爱奇艺视频分析理解中的实践
视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着AI时代的带来,互联网视频应用高速发展,视频更成为一种人人可生成的内容,数据量暴涨.如何利用机器学习将海量的视频内容充分利用起来,成 ...
- 【视频分析】大规模机器学习在爱奇艺视频分析理解中的实践
原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...
- uIP各部分协议代码的分析
转载地址:http://www.go-gddq.com/html/YuanMa-ChengXu/2013-03/1112798.htm uIP是模块化设计的,头文件主要有uip.h.uipopt.h. ...
- 理解Babel是如何编译JS代码的及理解抽象语法树(AST)
Babel是如何编译JS代码的及理解抽象语法树(AST) 1. Babel的作用是? 很多浏览器目前还不支持ES6的代码,但是我们可以通过Babel将ES6的代码转译成ES5代码,让所有的浏览器 ...
最新文章
- Django源码分析10:makemigrations命令概述
- matlab有向图分割算法,基于万有引力搜索算法图像分割的MATLAB实现
- 使用GetDIBts/SetDIBits高速逐点处理 from http://blog.sina.com.cn/s/blog_552ad2090100e3eu.html...
- 机器学习面试题之LR
- Bailian2909 字符串加空格【指针】
- 在 Mac上手动清除应用程序/用户缓存教程
- php之简单的文件管理(基本功能
- 拓端tecdat|R语言极值推断:广义帕累托分布GPD使用极大似然估计、轮廓似然估计、Delta法
- 扩展切比雪夫多项式(混沌映射, Chebyshev chaotic map)
- Mujoco模型学习记录
- D盘或者E盘根目录出现msdia80.dll文件的解决方法
- Python基础:什么是字符串?字符串是用来做什么的?
- pandas excel 数据随机打乱
- 软考高级系统架构设计师系列论文二十四:论信息系统的安全风险
- Android内存和SD卡的数据存取
- zigbee PRO 事件
- 读书笔记-《领导力21法则》
- 【Eclipse下载与安装教程】
- 云服务器1M带宽是上传吗,云主机1m带宽能干嘛?
- 最新搜索引擎提交网站的入口及技巧
热门文章
- 一文看懂临界区、互斥锁、同步锁、临界区、信号量、自旋锁等名词!
- 关于 /dev/urandom 的流言终结
- 车子前进档为什么往后退_为什么绝大部分自动挡汽车档把设计,往前是后退、往后是前进?...
- 原BEA全球副总裁沈惠中出任普元软件CEO
- python图片相似度计算_python Opencv计算图像相似度过程解析
- 麻省理工计算机专业,麻省理工学院计算机专业介绍_托普仕留学
- 线性代数(行列式矩阵向量)
- 跨越2009之华为总裁任正非
- python塔防小游戏代码_Python制作塔防小游戏
- 兰州大学计算机考研资料汇总