目录

题目

代码

分析


题目

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】雇佣兵代码及分析理解相关推荐

  1. NOI 雇佣兵讲解(c/c++)

    NOI 雇佣兵 例题 描述 雇佣兵的体力最大值为M,初始体力值为0.战斗力为N.拥有X个能量元素. 当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0.在同一个战斗期内 ...

  2. 《最新开源 随插即用》SAM 自增强注意力深度解读与实践(附代码及分析)

    写在前面 大家好,我是cv君,前段时间忙碌工作,许久没更新,越发觉得对不起csdn的读者们,决定继续加油保持更新,保持一周2-3篇的高频率和高质量文章更新:论文分析.代码讲解.代码实操和训练.优化部署 ...

  3. 【机器学习】机器学习在爱奇艺视频分析理解中的实践

    原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...

  4. 初学者复现CornerNet:详细指导零基础在Ubuntu系统运行该代码并完全理解论文思路的教程

    本篇博客将从CornerNet的内容介绍开始,详细介绍其代码复现.指出一些常见问题.如何理解代码中的诸多文件夹以及一些常见的改进,CornerNet的学习入门仅此一篇即可--阿波,更新于2020.4. ...

  5. [论文阅读] (20)USENIXSec21 DeepReflect:通过二进制重构发现恶意行为(恶意代码ROI分析经典)

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  6. 大规模机器学习在爱奇艺视频分析理解中的实践

    视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着AI时代的带来,互联网视频应用高速发展,视频更成为一种人人可生成的内容,数据量暴涨.如何利用机器学习将海量的视频内容充分利用起来,成 ...

  7. 【视频分析】大规模机器学习在爱奇艺视频分析理解中的实践

    原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...

  8. uIP各部分协议代码的分析

    转载地址:http://www.go-gddq.com/html/YuanMa-ChengXu/2013-03/1112798.htm uIP是模块化设计的,头文件主要有uip.h.uipopt.h. ...

  9. 理解Babel是如何编译JS代码的及理解抽象语法树(AST)

    Babel是如何编译JS代码的及理解抽象语法树(AST) 1. Babel的作用是?    很多浏览器目前还不支持ES6的代码,但是我们可以通过Babel将ES6的代码转译成ES5代码,让所有的浏览器 ...

最新文章

  1. Django源码分析10:makemigrations命令概述
  2. matlab有向图分割算法,基于万有引力搜索算法图像分割的MATLAB实现
  3. 使用GetDIBts/SetDIBits高速逐点处理 from http://blog.sina.com.cn/s/blog_552ad2090100e3eu.html...
  4. 机器学习面试题之LR
  5. Bailian2909 字符串加空格【指针】
  6. 在 Mac上手动清除应用程序/用户缓存教程
  7. php之简单的文件管理(基本功能
  8. 拓端tecdat|R语言极值推断:广义帕累托分布GPD使用极大似然估计、轮廓似然估计、Delta法
  9. 扩展切比雪夫多项式(混沌映射, Chebyshev chaotic map)
  10. Mujoco模型学习记录
  11. D盘或者E盘根目录出现msdia80.dll文件的解决方法
  12. Python基础:什么是字符串?字符串是用来做什么的?
  13. pandas excel 数据随机打乱
  14. 软考高级系统架构设计师系列论文二十四:论信息系统的安全风险
  15. Android内存和SD卡的数据存取
  16. zigbee PRO 事件
  17. 读书笔记-《领导力21法则》
  18. 【Eclipse下载与安装教程】
  19. 云服务器1M带宽是上传吗,云主机1m带宽能干嘛?
  20. 最新搜索引擎提交网站的入口及技巧

热门文章

  1. 一文看懂临界区、互斥锁、同步锁、临界区、信号量、自旋锁等名词!
  2. 关于 /dev/urandom 的流言终结
  3. 车子前进档为什么往后退_为什么绝大部分自动挡汽车档把设计,往前是后退、往后是前进?...
  4. 原BEA全球副总裁沈惠中出任普元软件CEO
  5. python图片相似度计算_python Opencv计算图像相似度过程解析
  6. 麻省理工计算机专业,麻省理工学院计算机专业介绍_托普仕留学
  7. 线性代数(行列式矩阵向量)
  8. 跨越2009之华为总裁任正非
  9. python塔防小游戏代码_Python制作塔防小游戏
  10. 兰州大学计算机考研资料汇总