NC202485. 收集纸片
描述
输入描述
在第一行中给出一个, 代表测试数据的组数。对于每组输入,在第一行中给出房间大小,第二行给出你的初始位置。接下来给出一个正整数 代表纸片的个数。接下来 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; }