首页 > 其他分享 >激光与巧克力

激光与巧克力

时间:2025-01-07 18:32:23浏览次数:3  
标签:巧克力 y2 激光 long y1 len x2 x1

一、题目

【问题描述】

       在一家重要的研究机构工作,小希参与了一项重要的试验:使用激光装置融化巧克力。

      该装置有包含 n×m 个单元的一个长方形区域以及一个机械臂组成,每个单元为一个 1×1  的小方块。机械臂上有两束激光垂直射向其表面,任何时候激光束都会射向两个单元的中心。由于两个激光束发射装置装在同一个机械臂上,故移动是同步的,也就是说,移动都在同一方向上。

      已知的事实为:

    • 开始时整个区域被大小为 n×m 的巧克力块覆盖,两束激光均处于区域上方且已激活

    • 只有被激光射向单元的巧克力将融化,其他单元内的不受影响

    • 机械臂的任何移动必须平行于区域的边缘,每次移动后激光都会同时射向两个单元的中心

    • 任何时候激光都只能射向本区域

       给出 n 和 m,表示区域的大小,行号从上往下从 1 到 n,列号从左到右为 1 到 m

       给出两束激光最开始时的位置 (x1,  y1) 和 (x2,  y2),其中 x1x2 为行号,y1y2 为列号。

       请找出这个区域内有多少单元的巧克力不能被融化。

【输入形式】

       输入的第一行为一个正整数 t,表示测试数据的组数。

       接下来的 t 每行6个正整数 n、m、x1、y1、x2、y2 (2 ≤ n, m ≤ 109, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m),分别表示区域的行数和列数,以及开始时激光束所在的位置。   

【输出形式】

       输出的t行,每行对应每组测试用例的结果
【样例输入】

2
4 4 1 1 3 3
4 3 1 1 2 2

【样例输出】

8
2

二、思路

这题可以通过数学计算得到

由于激光的初始位置不太好,我们可以先把激光移动到可移动的最左边和可移动的最上边

如图,我们可以把激光由A,B移动到C,D。这样分别算一下可以往右移动的最大长度x,和往左移动的最大长度y。容易得到两个激光分别可扫过的面积为x*y。

淡青色部分为A激光可扫过的面积SA。

橙色为B激光可扫过的面积SB。

中间的绿色是二者扫过的重合的面积SC。

那可以数学计算得到最后未扫过的部分面积S = m*n-(SA+SB)+SC;.

之后转换成编程语言就可以了。

三、代码实现

1.数据的获取和移动初始不好的位置(注意题目给的x1,x2是行数,不要看反了。。。)

	int T = 0;
	cin >> T;
	while (T--) {
		long long n, m;
		long long x1, y1, x2, y2;
		cin >> n >> m >> x1 >> y1 >> x2 >> y2;			//bu1:行数和列数看反了

		long long len_x = min(y1, y2) - 1;		//左移距离
		long long len_y = min(x1, x2) - 1;		//上移距离
		y1 -= len_x, y2 -= len_x;			//到整体最左点
		x1 -= len_y, x2 -= len_y;			//到整体最上点

2.计算可移动的水平长度和竖直长度


		long long right = m - max(y1, y2);	//向右可移动距离
		long long height = n - max(x1, x2);	//向下可移动距离

3.计算重叠部分面积

//计算重叠部分
long long repeated_x = 0, repeated_y = 0, s =0;
if (right >= abs(y1 - y2)&&height >=abs(x1-x2)) {
	repeated_x = right - abs(y1 - y2) + 1;
	repeated_y = height - abs(x1 - x2) + 1;
	s = repeated_x * repeated_y;
}

4.结果计算和输出

long long result = n * m - 2 * (right + 1) * (height + 1) + s;
cout << result << endl;

四、完整代码

#include<iostream>
using namespace std;

int main() {
	int T = 0;
	cin >> T;
	while (T--) {
		long long n, m;
		long long x1, y1, x2, y2;
		cin >> n >> m >> x1 >> y1 >> x2 >> y2;			//bu1:行数和列数看反了

		long long len_x = min(y1, y2) - 1;		//左移距离
		long long len_y = min(x1, x2) - 1;		//上移距离
		y1 -= len_x, y2 -= len_x;			//到整体最左点
		x1 -= len_y, x2 -= len_y;			//到整体最上点
		
		long long right = m - max(y1, y2);	//向右可移动距离
		long long height = n - max(x1, x2);	//向下可移动距离


		//计算重叠部分
		long long repeated_x = 0, repeated_y = 0, s =0;
		if (right >= abs(y1 - y2)&&height >=abs(x1-x2)) {
			repeated_x = right - abs(y1 - y2) + 1;
			repeated_y = height - abs(x1 - x2) + 1;
			s = repeated_x * repeated_y;
		}

		long long result = n * m - 2 * (right + 1) * (height + 1) + s;
		cout << result << endl;
	}
	return 0;
}

标签:巧克力,y2,激光,long,y1,len,x2,x1
From: https://blog.csdn.net/2403_87544412/article/details/144990939

相关文章

  • 激光雷达和相机联合半自动标定
    文章目录1.背景描述2.整体架构3.核心理论3.1相机内外参3.2自动标定4.关键代码4.1读取雷达点云4.2读取相机图像4.3点云分割找棋盘格4.4相机内参标定4.5图像棋盘格描点4.6世界坐标系转相机坐标系4.6保存内外参数5.总体结论6.......
  • 牛客 NC20032 激光炸弹 二维前缀和
    #include<bits/stdc++.h>usingnamespacestd;inta[5010][5010];intpre[5010][5010];constintN=5e3;intmain(){ intn,m; cin>>n>>m; for(inti=0;i<n;i++) { intx,y,z; cin>>x>>y>>z; a[x][y]=z; } pre[0][0......
  • MATLAB中的激光器仿真
    MATLAB中的激光器仿真资源文件列表程序/光孤子传输仿真程序/光孤子传输仿真程序/readme.txt , 318程序/光孤子传输仿真程序/光孤子传输仿真程序/solitonevolution1.m , 1675程序/光孤子传输仿真程序/光孤子传输仿真程序/solitonevolution2.m , 1674程序/光孤子传输仿真......
  • 【基于激光点云的目标检测】Ubuntu-Linux | 激光点云
    #本文是记录学习使用激光雷达相关的内容,其中是参考下面这篇博客无人驾驶汽车系统入门(二十四)——激光雷达的地面-非地面分割和pcl_ros实践_地面分割:无人驾驶汽车系统入门(二十四)-CSDN博客#一、激光雷达信号处理1、点云处理(1)点云预处理        由于点云的数据集......
  • [超表面论文快讯-7] Advanced Functional Materials-片上超表面多维激光场操控-北京工
    栏目介绍:“论文快讯”栏目旨在精简地分享一周内发表在高水平期刊上的Metasurface领域研究成果,帮助读者及时了解领域前沿动态,如果对专栏的写法或内容有什么建议欢迎留言,后续会陆续开启其他专栏,敬请期待。论文基本信息标题:On-ChipMultidimensionalManipulationsofSp......
  • qt激光加工软件开发——日志模块
    本篇主要介绍该加工软件的日志模块实现的功能:主界面日志栏显示分级显示本地保存简单的调用机制目前选择的是qInstallMessageHandler,毕竟是qt亲儿子(Qt5.0以上版本)QMutex保证线程安全消息的格式化,目前主要是debug与warning,主页面显示会做颜色区分信号logMes......
  • qt激光加工软件开发(一)
    20年毕业后,先是从事qt+c++开发,而后从事mfc开发,今年步入新的公司,着手开发一版新的激光设备加工软件激光加工软件所具备的功能:轴的控制:主要包括XYZ三个轴,品牌:ACS、固高、Galil控制卡等相机控制:用于显示影像,进行识别定位等功能,品牌:大恒、海康、Basler等激光器控制:用于划线,打标,清......
  • CG-54 激光雪深传感器
    产品概述  激光雪深传感器,一种数字化雪深测量仪器,具有体积小、功耗低、测量精度高、工作稳定可靠、操作简单等特点。功能特点◆雪深传感器采用激光测量方式,增加了加热温度补偿功能使测量更准确◆测程大,精度高◆具有丰富的工业数据接口(RS232、485、422、0~10V,0~5V,4~20mA等......
  • 巧克力板选择问题
    问题描述小M在春游时打算携带尽可能多的巧克力板。她拥有n块巧克力板,每块巧克力的边长为ai​,重量为ai2​。小M有多个不同大小的背包,每个背包都有一定的最大承重限制。她希望你帮助她计算在每个背包的最大承重范围内,最多可以带走多少块巧克力板。例如:小M有5块巧克力板,边长分别......
  • 激光雷达定位与建图-拟合问题
    本篇文章介绍如何在点云中提取线段和平面。一、平面拟合1.问题提出给定一组由N个点组成的点云X={x......