wa3,不知道为啥
查看原帖
wa3,不知道为啥
835942
jntm233楼主2024/3/13 20:20

看了大佬们的的思路,感觉和我也差不多,只不过我是把第二个桌子放在四个角

#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();
}
2024/3/13 20:20
加载中...