列表

详情


NC202485. 收集纸片

描述

我们把房间按照笛卡尔坐标系进行建模之后,每个点就有了一个坐标。
假设现在房子里有些纸片需要被收集,收集完纸片你还要回归到原来的位置,你需要制定一个策略来使得自己行走的距离最短。
你只能沿着 x 轴或 y 轴方向移动,从位置 (i,j) 移动到相邻位置 (i+1,j),(i-1,j),(i,j+1) 或 (i,j-1) 距离增加 1。

输入描述

在第一行中给出一个, 代表测试数据的组数。
对于每组输入,在第一行中给出房间大小,第二行给出你的初始位置。
接下来给出一个正整数  代表纸片的个数。
接下来 n 行,每行一个坐标代表纸片的位置。
保证房间小于 ,纸片一定位于房间内。

输出描述

对于每组输入,在一行中输出答案。
格式参见样例。

示例1

输入:

1
10 10
1 1
4
2 3
5 5
9 4
6 5

输出:

The shortest path has length 24

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 500K, 提交时间: 2020-02-23 01:00:59

#include<bits/stdc++.h> 
using namespace std;
int t , sx , sy , x[11] , y[11] , n , m , k;
int main()
{
	cin >> t;
	while(t --)
	{
		int ans = 0;
		cin >> n >> m >> sx >> sy >> k;
		for(int i = 0 ; i < k ; i ++) cin >> x[i] >> y[i];
		sort(x , x + k);
		sort(y , y + k);
		if(x[0] < sx) ans += sx - x[0];
		if(x[k - 1] > sx) ans += x[k - 1] - sx; 
		if(y[0] < sy) ans += sy - y[0];
		if(y[k - 1] > sy) ans += y[k - 1] - sy;
		cout << "The shortest path has length " << (ans << 1) << '\n';
	}
	return 0;
} 

Python3(3.5.2) 解法, 执行用时: 34ms, 内存消耗: 3564K, 提交时间: 2020-04-10 14:17:36

for ___ in [0] * int(input()):
    x, y = map(int, input().split())
    sx, sy = map(int, input().split())
    n, a, b, a1, b1 = int(input()), 1, 1, sx, sy
    for i in range(n):
        u, v = map(int, input().split())
        a, a1, b, b1 = max(a, u), min(a1, u), max(b, v), min(b1, v)
    print('The shortest path has length ' + str(a + b - a1 - b1 << 1))

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 612K, 提交时间: 2020-05-19 21:45:20

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c,d,t,n,m,x,y,T;
	cin>>t;
	while(t--){
		cin>>n>>m;
		cin>>x>>y;
		a=b=x;
		c=d=y;
		cin>>T;
		while(T--){
			cin>>x>>y;
			a=max(a,x);
			b=min(b,x);
			c=max(c,y);
			d=min(d,y);
		}
		cout<<"The shortest path has length "<<2*(a+c-b-d)<<endl;
	}
    return 0;
}

上一题