当前位置: 首页 > news >正文

每日一题之修建灌木

问题描述

爱丽丝要完成一项修剪灌木的工作。

有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。

灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

输入格式

一个正整数 N, 含义如题面所述。

输出格式

输出 N 行, 每行一个整数, 第 ii 行表示从左到右第 ii 棵树最高能长到多高。

解题思路

  1. 灌木的生长规律

    • 每棵灌木在被修剪之前,每天都会长高1厘米。
    • 灌木的最高高度取决于它两次被修剪之间的时间间隔(即多少天没有被修剪)。
  2. 修剪周期

    • 对于N棵灌木,爱丽丝的修剪周期是:从左到右,再从右到左,形成一个来回。
    • 一个完整的修剪周期需要 2(N−1) 天(因为从最左到最右需要 N−1 天,再从最右到最左也需要 N−1 天)。
  3. 每棵灌木的最大高度

    • 对于第 i 棵灌木(从左到右编号为1到N),它两次被修剪之间的时间间隔是 2×max(i−1,N−i)。
      • 从左到右修剪时,第 i 棵灌木在第 i 天被修剪。
      • 从右到左修剪时,第 i 棵灌木在第 N−i+1 天被修剪(从右到左的第 N−i+1 天)。
      • 因此,两次修剪之间的天数是 i−1 和 N−i 中的较大值的两倍。

数学推导

  • 第 i 棵灌木的最大高度为:max_height[i]=2×max(i−1,N−i)
  • 这是因为:
    • 如果 i 靠近左侧(i≤N/2),则从右到左修剪时,它会在 2(N−i) 天后被修剪。
    • 如果 i 靠近右侧(i>N/2),则从左到右修剪时,它会在 2(i−1) 天后被修剪。
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int N;
    cin >> N;
    for (int i = 1; i <= N; ++i) {
        cout << 2 * max(i - 1, N - i) << endl;
    }
    return 0;
}

http://www.dtcms.com/a/99391.html

相关文章:

  • 2D视觉系统选型(待补充)
  • DHCP报文的详细流程
  • 高精度十进制数运算
  • Python库()
  • 【人工智能之大模型】哪些因素会导致大语言模型LLM的偏见?
  • 淘宝店铺清单及全商品数据、关键词检索 API 介绍
  • 金融级密码管理器——跨设备同步的端到端加密方案
  • [创业之路-343]:创业:一场认知重构与组织进化的双向奔赴
  • c++第三课(基础c)
  • 网页设计思路
  • 论文阅读笔记——ReconDreamer
  • 【YOLOv11】目标检测任务-实操过程
  • Tof 深度相机原理
  • kubernetes Calico(CNI) NetworkPolicy 流量管理 设置networkpolicy 策略 下集
  • 【Go】Go Prometheus 快速入门
  • C语言笔记数据结构(链表)
  • Jenkins + CICD流程一键自动部署Vue前端项目(保姆级)
  • 输入模块(TM1638函数的使用)
  • 驱动开发系列49 - 搭建 Vulkan 驱动调试环境(编译 mesa 3D)- Ubuntu24.04
  • postman测试文件上传接口详解
  • 鸿蒙原生开发之状态管理V2
  • 白盒测试/接口测试/自动化测试
  • python 如何打包成exe文件
  • 嵌入式系统安全架构白皮书
  • PH热榜 | 2025-03-29
  • 【C语言】一文掌握 C 语言用法(C 备忘清单)
  • 数据湖的数据存储与管理策略:构建高效的数据管理框架
  • Web自动化测试:Unittest单元测试框架
  • 如果从一个系统向另一个系统推送2000条数据,java中使用什么技术合理
  • 【AI速读】CNN图像处理单元的形式化验证方法