蓝桥杯题目----机器人移动

本文探讨了在笛卡尔坐标系中,机器人从一点移动到另一点后,向右转90度并继续前进时,如何计算其最先经过的整点坐标。通过分析向量和最大公约数的概念,提供了一种有效的方法来确定这一坐标。
描述

假设一个机器人在笛卡尔坐标系上。它从(X1, Y1)移动到了(X2, Y2),然后向右转90度,继续前进。  

请你计算这个机器人继续前进过程中最先经过的整点是哪一个?
输入

四个整数X1, Y1, X2, Y2。

-1000000 ≤ X1, Y1, X2, Y2 ≤ 1000000 保证(X1, Y1)和(X2, Y2)是不同的点。
输出

两个整数X和Y代表最先经过的整点坐标。
样例输入

    0 0 1 2

样例输出

    3 1

数学题,提示:一条向量(x,y)第一次经过的整点是坐标除以他们的最大公约数:(x/gcd(x,y),y/gcd(x,y));

             这题也可以不用数学的知识,其他方法也可以的,以下是代码:

#include <vector>
#include <stack>
#include <string>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <queue>
#define _for(i,a,b) for(int i=a;i<b;i++)
#define _unfor(i,a,b) for(int i=a;i>=b;i--)
#define RI(a) scanf("%d",&a)
#define mset(a,val,n) for(int i=0;i<n;i++)a[i]=val;
#define mset2(a,val,n,m) for(int i=0;i<n;i++)for(int j=0;j<m;j++)a[i][j]=val;
#define FI freopen("in.txt","r",stdin)
#define FO freopen("out.txt","w",stdout)
using namespace std;
typedef long long LL;

int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}

int main() {
    int x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	int dy=y2-y1,dx=x2-x1,gcdxy=gcd(abs(dx),abs(dy));
	printf("%d %d\n",x2+dy/gcdxy,y2-dx/gcdxy);
}

 

### 关于蓝桥杯扫地机器人算法题解题思路 #### 题目背景 蓝桥杯中的“扫地机器人”是一道经典的算法题目,主要考察选手对于暴力优化、二分法以及搜索与查找的理解能力。该问题通常涉及如何通过合理规划路径来完成特定区域的清扫任务[^1]。 #### 核心概念解析 1. **前缀和的应用** 前(n-1)个机器人已经清扫到的格数可以通过计算累积总和的方式快速得出。这种技巧能够有效减少重复计算的时间复杂度,从而提升程序效率[^2]。 2. **目标定义** 清扫方法的选择直接影响最终所需时间长短。因此,在给定区域内寻找最优策略成为解决问题的关键所在。具体而言,就是找到一种方式使得所有指定范围内的单元都被覆盖至少一次的同时尽可能缩短整体耗时[^3]。 #### 技术实现方案 以下是基于上述理论构建的一个可能解决方案框架: ```cpp #include <bits/stdc++.h> using namespace std; // 定义结构体存储每个位置的状态信息 struct Position { int x, y; }; bool cmp(Position a, Position b){ return (a.x != b.x)?(a.x<b.x):(a.y<b.y); } int main(){ vector<Position> positions; // 输入处理部分省略... sort(positions.begin(),positions.end(),cmp); long long total = 0; // 记录当前累计清洁数量 for(int i=0;i<n;++i){ if(i && positions[i].x == positions[i-1].x && abs(positions[i].y - positions[i-1].y)==1 ){ continue;// 如果相邻两点在同一列且距离为1,则无需额外移动 } // 更新total值逻辑依据引用描述调整相应变量名含义解释清楚即可满足要求 total += ... ;//[根据实际需求补充完整表达式] } cout<<total<<endl; } ``` 此代码片段展示了基本的数据读取、排序操作以及简单的状态转移过程。需要注意的是,`total` 的更新规则应严格遵循题目设定条件来进行适配修改^。 #### 总结 通过对本题目的深入分析可以看出,“扫地机器人”的核心在于利用高效数据结构配合恰当算法降低运算负担,同时兼顾边界情况考虑全面性。只有这样才能够在限定时间内获得满意的结果输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值