寒假每日一题——拖拉机

news/2024/11/27 8:44:01/

拖拉机

问题描述

干了一整天的活,农夫约翰完全忘记了他把拖拉机落在田地中央了。

他的奶牛非常调皮,决定对约翰来场恶作剧。

她们在田地的不同地方放了 N 捆干草,这样一来,约翰想要开走拖拉机就必须先移除一些干草捆。

拖拉机的位置以及 N 捆干草的位置都是二维平面上的整数坐标点。

拖拉机的初始位置上没有干草捆。

当约翰驾驶拖拉机时,他只能沿平行于坐标轴的方向(北,南,东和西)移动拖拉机,并且拖拉机必须每次移动整数距离。

例如,驾驶拖拉机先向北移动 2 单位长度,然后向东移动 3 单位长度。

拖拉机无法移动到干草捆占据的位置。

请帮助约翰确定他需要移除的干草捆的最小数量,以便他能够将拖拉机开到二维平面的原点。
输入格式
第一行包含三个整数:N 以及拖拉机的初始位置 (x,y)。

接下来 N 行,每行包含一个干草捆的位置坐标 (x,y)。

输出格式
输出约翰需要移除的干草捆的最小数量。

数据范围
1≤N≤50000,
1≤x,y≤1000
输入样例:

7 6 3
6 2
5 2
4 3
2 1
7 3
5 4
6 4

输出样例:

1

问题解决

1.证明双端队列广搜的队列中最多只有两段 一段为x 后一段为x+1

证明:

采用数学归纳法证明:
1.初始时,队列中只有起点,结论成立;
2.假设当k = n - 1时结论成立,证明当k = n时结论成立
3.因为当k = n - 1时成立,所以,x = x + 0放在队头, x = x + 1放在队尾,仍只有两段;若k = n - 1时只有一段,易证成立。故得证。

2.回归到题目

本题是点权问题,入队判重也可能对;若x,y在队列中,要到z的位置,而x到z是1,说明z是障碍物,那么y到z也是1

完整代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <deque>using namespace std;const int N = 1010;bool g[N][N], st[N][N];
int d[N][N];
int n, sx, sy;
typedef pair<int, int> PII;int bfs()//实际上是dijkstra算法
{deque<PII> dq;memset(d, 0x3f, sizeof d);dq.push_back({sx, sy});//将起点加入双端队列d[sx][sy] = 0;int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};while(dq.size()){auto t = dq.front();dq.pop_front();int x = t.first, y = t.second;if(st[x][y]) continue;//表示该位置已经搜索过了st[x][y] = true;if(!x && !y)//即x y均等于0 表示拖拉机已开到原点break;for(int i = 0; i < 4; i++){int nx = x + dx[i], ny = y + dy[i];if(nx >= 0 && nx < N && ny >= 0 && ny < N){int w = 0;if(g[nx][ny]) w = 1;if(d[nx][ny] > d[x][y] + w){d[nx][ny] = d[x][y] + w;if(w == 0) dq.push_front({nx, ny}); //w等于0加到队头else dq.push_back({nx, ny});//w等于1加到队尾}}}}return d[0][0];
}int main()
{scanf("%d%d%d", &n, &sx, &sy);while (n -- ){int x, y;scanf("%d%d", &x, &y);g[x][y] = true;}printf("%d\n", bfs());return 0;
}

http://www.ppmy.cn/news/190686.html

相关文章

中国拖拉机制造行业市场消费量调研及供需发展态势分析报告2021-2027年

第1章&#xff1a;中国拖拉机制造行业发展综述 1.1 拖拉机制造行业定义及分类 1.1.1 行业概念及定义 1.1.2 行业主要产品大类 1.1.3 行业发展历程和趋势 1.1.4 行业在国民经济中的地位 1.1.5 行业在农机制造行业中的地位 1.2 拖拉机制造行业统计标准 1.2.1 拖拉机制造行业统计部…

1978-2020年全国及31省市农业机械总动力(万千瓦)

1978-2020年全国及31省市农业机械总动力&#xff08;万千瓦&#xff09; 1、时间&#xff1a;1978-2020年 2、范围&#xff1a;31省 3、来源&#xff1a;各省NJ 农业统计NJ 4、缺失情况&#xff1a;无缺失 5、指标&#xff1a;农业机械总动力 6、指标解释&#xff1a; 农…

2021年中国农机市场现状:农机销售额达346亿,购机用户数103万,同比下降53%[图]

一、农机市场现状 全国农作物耕种收综合机械化率达71.25%&#xff0c;较上年提高1.23个百分点&#xff0c;较“十二五”末提高7.43个百分点&#xff1b;其中&#xff0c;机耕率、机播率、机收率分别达到85.49%、58.98%、64.56%。畜牧养殖、水产养殖、农产品初加工、设施农业等…

制作一个小型三节履带底盘【内附资料下载链接】

1.运动功能说明 双节履带车可以通过两个驱动轮的差速运动来实现前进、后退、原地转向、大半径转向等基本行驶功能&#xff0c;并可通过舵机关节模块进行小臂的抬起和落下。通过底盘运动与小臂运行的结合&#xff0c;实现上台阶、通过坑洼地面等功能。 2. 结构说明 该样机由两…

履带式机械臂小车的制作分享

1. 运动功能说明 履带式机械臂小车样机是一款搭载了机械臂的平行履带小车。它的底盘具备基本的行驶和原地转向功能&#xff0c;机械臂具备抬升、放下、抓取等功能。整体上可以实现抓取、搬运、码放等功能&#xff0c;可作为搬运机器人、排爆机器人等的模型使用。 2. 结构说明 …

拖拉机游戏玩法

拖拉机游戏是两副牌的80分升级。 --详细规则、胜负判定方法 分牌&#xff1a; 升级游戏中每张5、10和K是分牌&#xff0c;5代表5分&#xff0c;10代表10分&#xff0c;K也代表10分&#xff0c;两副牌共200分。游戏中&#xff0c;每方都要尽量抓获这些分牌。扣在底牌中的分…

拖拉机大战贺岁版发布

一直以来一直在玩世纪鼎点的拖拉机游戏&#xff0c;圣诞节前和朋友一起玩&#xff0c;朋友说为什么你不用.net开发一个呢&#xff0c;至少游戏玩的不爽的时候自己可以调整一下。现在赶在春节之前将其发布&#xff0c;愿能给大家在休闲娱乐的时候带来一点快乐&#xff0c;也祝大…

2021年中国轮式拖拉机供需现状及竞争格局分析,中国一拖市占率接近20%「图」

一、拖拉机的分类 拖拉机用于牵引和驱动作业机械完成各项移动式作业的自走式动力机。也可做固定作业动力。由发动机、传动、行走、转向、液压悬挂、动力输出、电器仪表、驾驶操纵及牵引等系统或装置组成。发动机动力由传动系统传给驱动轮&#xff0c;使拖拉机行驶&#xff0c;…