看了大佬们的的思路,感觉和我也差不多,只不过我是把第二个桌子放在四个角
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pll=pair<ll,ll>;
void solve(){
ll n,m;cin>>n>>m;
ll x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;
ll w,h;cin>>w>>h;
ll w1=x2-x1,h1=y2-y1;
//应该再去判断四个空位:[n,y1],[x1,m],[n,m-y2],[n-x2,m]
vector<pll>a,b,c;
a.push_back({n,y1}),a.push_back({x1,m}),a.push_back({n,m-y2}),a.push_back({n-x2,m});
for(auto i:a){
ll x=i.first,y=i.second;
if(w<=x&&h<=y){
printf("%.9f\n",(double)0);
return;
}
}
b.push_back({x1,y1}),b.push_back({x2,y1}),b.push_back({x2,y2}),b.push_back({x1,y2});
c.push_back({w,h}),c.push_back({n-w,h}),c.push_back({n-w,m-h}),c.push_back({w,m-h});
ll ans=LONG_LONG_MAX;
for(int i=0;i<4;i++){
ll ax=abs(c[i].first-b[i].first),ay=abs(c[i].second-b[i].second);
// cout<<ax<<" "<<ay<<endl;
//移动的a,y距离
if(i==0){
//右上角不出界
if(x2+ax>n&&y2+ay>m){
printf("-1\n");
return;
}
}
if(i==1){
//左上角不出界
if(x1-ax<0&&y2+ay>m){
printf("-1\n");
return;
}
}
if(i==2){
//左下角不出界
if(x1-ax<0&&y1-ay<0){
printf("-1\n");
return;
}
}
if(i==3){
//右下角不出界
if(x2+ax>n&&y1-ay<0){
printf("-1\n");
return;
}
}
if(w==n&&x2==w){
ans=min(ans,ay);
}else if(h==m&&y2==h){
ans=min(ans,ax);
}else
ans=min(ans,min(ax,ay));
}
printf("%.9f\n",(double)ans);
}
int main(){
ll t;cin>>t;
for(int i=1;i<=t;i++)solve();
}