热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UVa11683:激光雕刻技术解析

自1958年发明以来,激光技术已在众多领域得到广泛应用,包括电子设备、医疗手术工具、武器等。本文将探讨如何使用激光技术进行材料雕刻,并通过编程解决一个具体的激光雕刻问题。

自1958年激光技术被发明以来,它已经在诸如电子设备、外科手术工具、武器等多个领域得到了广泛的应用。

激光雕刻设备示意图

上图展示了一种用于固体材料雕刻的激光设备示意图。图中可见,激光发射器可水平向右和向左移动,且速度恒定。当激光发射器在移动过程中开启时,会从材料块上移除一层特定厚度的材料,这些材料会被激光汽化。

下图展示了激光雕刻过程的一个例子,其中包括:(a) 初始状态下的材料块,高度为5毫米,长度为8毫米;(b) 雕刻后期望达到的形状;(c) 整个雕刻过程中各层材料的去除顺序。在每个步骤中,都会移除1毫米厚的一层材料。在雕刻过程中,激光共开启了7次,每次对应于材料块的一部分。

激光雕刻过程示例

请编写一个程序,给定材料块的高度和长度以及最终形状,计算出完成雕刻所需的激光开启次数。

输入

输入包含多个测试案例。每个测试案例由两行组成。第一行包含两个整数A和C,分别表示待雕刻材料块的高度(1 ≤ A ≤ 10^4)和长度(1 ≤ C ≤ 10^4),单位为毫米。第二行包含C个整数Xi,每个整数表示沿材料长度方向位置i至i+1之间的最终高度(0 ≤ Xi ≤ A,对于0 ≤ i ≤ C−1)。假设在每一步中,激光开启时会从材料的相应部分移除1毫米厚的一层。

输入结束标志为一行仅包含两个零,中间以空格分隔。

输出

对于每个测试案例,程序应输出一行,包含一个整数,表示为了将材料雕刻成指定形状需要开启激光的总次数。

样例输入

5 8
1 2 3 2 0 3 4 5
3 3
1 0 2
4 3
4 4 1
0 0

样例输出

7
3
3

问题链接: UVa 11683: Laser Sculpture

问题简述: 本题要求根据给定的材料尺寸和目标形状,计算出完成雕刻所需的最小激光开启次数。

问题分析: 该问题属于基础类型,主要考察对输入数据的理解及简单的数学运算能力。

程序说明: 通过读取输入数据,比较相邻位置的高度差,累加所有下降的高度值即为所需激光开启次数。

参考链接: 略

题记: 在解决问题时,尽量减少不必要的内存使用。

以下是使用C++实现的解决方案:

/* UVa 11683: Laser Sculpture */
#include
using namespace std;
int main()
{
int height, length, currentHeight, previousHeight, totalTurns;
while(scanf("%d", &height) != EOF && height) {
scanf("%d", &length);
previousHeight = height;
totalTurns = 0;
for(int i = 0; i scanf("%d", ¤tHeight);
if(currentHeight totalTurns += previousHeight - currentHeight;
previousHeight = currentHeight;
}
printf("%d\n", totalTurns);
}
return 0;
}


推荐阅读
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • C++: 实现基于类的四面体体积计算
    本文介绍如何使用C++编程语言,通过定义类和方法来计算由四个三维坐标点构成的四面体体积。文中详细解释了四面体体积的数学公式,并提供了两种不同的实现方式。 ... [详细]
author-avatar
西南科技大学地质协会_927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有