时间限制:1S 内存限制:512MB 分值:10
在一幢宽w,深d,高h的长方体房子中,一台笔记本电脑放在地面(a,b)坐标处,在房顶(f,g)坐标处有一架投影仪,现在需要用信号线把笔记本和投影仪连接起来,为了美观,布线必须在长方体表面上并沿着平行于x或y或z轴的方向,如图:
(放再大这个图也是这套题最正经的图儿!注释就不一定了)
输入:
第一行,一个整数t,表示共有t组测试。
接下来每两行数据表示一组测试,其中第一行为w,d,h;第二行为a,b,f,g。
输出:
共t行,每行一个整数,表示最短布线长度。
样例一:
输入:
5
55 20 29
23 10 18 3
20 10 5
1 5 2 5
15 15 4
7 13 10 10
2 1000 2
1 1 1 999
10 4 10
7 1 2 1
输出:
47
8
14
1002
17
数据规模与约定:
1≤t≤104
2≤w,d,h≤1000
0<a,f<w
0<b,g<d
分析:长方体两个相对面上的两点,从平面上从一个点走到另一个点,沿着边走有四个方向,只需求出四个方向的距离,求最小值即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int t,w,d,h,a,b,f,g,cnt=0;
int res1,res2,res3,res4;
int main(){
cin>>t;
for(int i=0;i<t;i++){
cnt=0;
cin>>w>>d>>h;
cin>>a>>b>>f>>g;
res1=abs(a)+abs(f)+h+abs(b-g);
res2=abs(w-a)+abs(w-f)+h+abs(b-g);
res3=abs(b)+abs(g)+h+abs(a-f);
res4=abs(d-b)+abs(d-g)+h+abs(a-f);
cnt=min(res1,min(res2,min(res3,res4)));
cout<<cnt<<"\n";
}
return 0;
}