Brightest Immaculate Teresa(简单题)(北理16校赛)

本文探讨了一个有趣的几何问题:如何在二维平面上找到一个点,使得该点到所有给定点(代表星星的位置)的曼哈顿距离之和最小。通过枚举100*100范围内的所有可能点,找到了最佳位置。
时间限制1秒 内存限制64M

题目描述:

        Teresa是个有着丰富内心世界的女孩子,时常抬起头来看着北京的夜空。

        今夜天上又有着无数繁星,Teresa想着一个有趣的问题:如果把所有夜空中的星星看做二维平面上的点 (Xi,Yi) ,哪一个点(这个点可以是平面上任意一点)离所有的星星最近呢最近,意味着对于点 (X,Y) ,使 \sum_{i=1}^{n}{|X-Xi|}+\sum_{i=1}^{n}{|Y-Yi|} 最小。

输入格式:

        给定用例组数T。

        对于每组用例,给出星星数 N  N \leq 1000  且为奇数,接下来的 N 行每行给出 Xi  Yi  0 \leq Xi,Yi < 100  ,用空格隔开。

输出格式:

        对于每组用例,给出两个整数坐标 X,Y 代表离所有星星最近的位置,两个整数用空格隔开,占一行。

样例输入:

        1

        3

        1 3

        2 2 

        3 1

样例输出:

        2 2


题目大意:

              在平面上有一些星星,选取一点作为离所有星星的曼哈顿距离和最小的节点。

解题思路:

              由于星星都在100*100的方格内,可以保证要求的答案一定也在100*100之内,否则答案更好,而且题目要输出整点,所以直接枚举这10000个点,求出和所有星星的坐标差求和即可。


#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
#include <string>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int INF=0x3f3f3f3f;
#define CLR0(a) (memset(a,0,sizeof(a)))
#define CLR1(a) (memset(a,-1,sizeof(a)))
#define CLRf(a) (memset(a,0x3f,sizeof(a)))
//#define rush() int t;scanf("%d",&t);while(t--)
const int maxn=0;
const int maxm=0;
int x[1500],y[1500];
int abss(int xx,int yy)
{
	int z=xx-yy;
	if(z>=0)return z;
	return -z;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,xx,yy;
		int mi=INF;
		scanf("%d",&n);
		for(int i=0;i<n;i++)
		{
			scanf("%d%d",&x[i],&y[i]);
		}
		for(int i=0;i<=100;i++)
			for(int j=0;j<=100;j++)
			{
				int sum=0;
				for(int k=0;k<n;k++)
					sum+=abss(i,x[k])+abss(j,y[k]);
				if(sum<mi)
				{
					mi=sum;
					xx=i;yy=j;
				}
			}
		printf("%d %d\n",xx,yy);
	}
	return 0;
}


### 2023年电E OpenMV 使用教程及相关解决方案 #### OpenMV在运动目标控制中的角色 OpenMV作为一款嵌入式计算机视觉平台,在2023年全国大学生电子设计竞E中被广泛应用于运动目标的检测与追踪。其核心优势在于提供了丰富的图像处易于使用的API接口,这使得开发者可以专注于算法实现而非底层细节[^1]。 以下是基于OpenMV实现运动目标控制的具体方法: --- #### 硬件配置与初始化 为了完成题目要求的目标追踪功能,通常需要搭配两个舵机来调摄像头的角度,从而实时定位并追踪目标物体的位置。硬件连接方式如下: - **舵机驱动模块**:通过PWM信号控制舵机转动角度。 - **OpenMV相机**:负责捕捉视频流并对其中的目标进行分析。 ```python import pyb, sensor, image, math # 初始化传感器参数 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) # 设置分辨率 sensor.skip_frames(time=2000) # 定义舵机对象 servo_x = pyb.Servo(1) # 假设X轴舵机接在P1口 servo_y = pyb.Servp(2) # Y轴舵机接在P2口 ``` --- #### 图像处流程 针对题目需求,可以通过以下步骤实现目标识别与追踪: 1. **光源检测**:利用亮度阈值筛选出画面中最亮的部分,忽略颜色属性以减少环境干扰[^4]。 2. **坐标提取**:获取目标区域中心点相对于个画布的比例位置。 3. **反馈调节**:根据偏差量计算舵机应旋转的角度增量,并发送相应的PWM指令更新姿态。 具体代码片段展示如下: ```python def find_brightest_blob(img): threshold = [(200, 255)] # 设定灰度范围用于过滤背景噪声 blobs = img.find_blobs(threshold, pixels_threshold=100, area_threshold=100) if not blobs: return None brightest = max(blobs, key=lambda b:b.pixels()) cx, cy = brightest.cx(), brightest.cy() # 获取质心坐标 return (cx, cy) while True: img = sensor.snapshot().binary([(200, 255)]) # 转化为二值图便于后续操作 pos = find_brightest_blob(img) if pos is not None: error_x = pos[0] - (img.width() / 2) error_y = pos[1] - (img.height() / 2) angle_adjustment_x = int(error_x * Kp_X) # PID控制器比例系数Kp需预先调好 angle_adjustment_y = int(error_y * Kp_Y) servo_x.angle(servo_x.angle()+angle_adjustment_x) servo_y.angle(servo_y.angle()-angle_adjustment_y) # 注意负号逻辑匹配实际机械结构 time.sleep_ms(50) ``` 以上脚本实现了基本的功能框架,但仍需进一步优化才能满足比苛刻条件下的稳定表现。 --- #### 可能遇到的问及其解决办法 1. **光照变化影响准确性** 题目明确规定测试场景可能涉及不同强度照明情况,单纯依赖固定数值判断容易失败。建议动态调阈值或者引入自适应滤波器降低波动幅度的影响[^3]。 2. **延迟过高导致响应迟缓** 如果发现系统动作滞后明显,则可能是帧率不足引起。尝试缩小图片尺寸至QQVGA级别或将不必要的运算卸载到外部MCU执行可有效缓解压力。 3. **多光源混淆现象** 当存在多个相似强度发光源时,仅依靠单一特征难以区分主次关系。此时可通过形态学膨胀腐蚀操作增强对比效果再做决策。 --- #### 总结 综上所述,借助OpenMV强大的软硬件支持完全可以胜任本次大提出的挑战项目。不过需要注意的是实战过程中还需不断试验修各项设定直至达到想状态为止。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值