链接:
https://codeforces.com/problemset/problem/1555/B
题意:
求一个屋子,一张桌子,再塞一张桌子的话,要把原来桌子,移动多少
输入
5
8 5
2 1 7 4
4 2
5 4
2 2 5 4
3 3
1 8
0 3 1 6
1 5
8 1
3 0 6 1
5 1
8 10
4 5 7 8
8 5
输出量
1.000000000
-1
2.000000000
2.000000000
0.000000000
解:
一切尽在注释中 and 答案只有整数
实际代码:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long int ll;
int main()
{
ll t;
cin>>t;
for(int f=1;f<=t;f++)
{
ll W,H;
cin>>W>>H;//输入表大小
ll x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;//输入第一张桌子位置;
ll sk=abs(H-y2);//上面的空间
ll xk=abs(y1-0);//下面的空间
ll zk=abs(x1-0);//左边的空间
ll yk=abs(W-x2);//右边的空间
ll w=0,h=0;
cin>>w>>h;//新桌子的宽度和高度
//cout<<"___kong___"<<endl;
//cout<<sk<<" "<<xk<<" "<<zk<<" "<<yk<<endl;
ll xc=(w-max(zk,yk));//在左右空间中寻找最大的空间,然后放进去,看看差多少.
ll yc=(h-max(sk,xk));//在上下空间寻找最大的空间 ,然后放进去,看看差多少.
//cout<<"差值"<<endl;
//cout<<xc<<" "<<yc<<endl;
bool sx=1,zy=1;
if(xc>min(zk,yk)) zy=0;//差值比剩余空间大,不成立
if(yc>min(sk,xk)) sx=0;//差值比剩余空间大,不成立
//cout<<zy<<" "<<sx<<endl;
if(xc<0||yc<0)
{
cout<<0<<endl;
}
else
{
if(sx==0&&zy==0)//都不成立,-1
{
cout<<-1<<endl;
}
else
{
if(sx==0&&zy==1)//只能左右移动,x方向解决
{
//cout<<"the xc"<<endl;
cout<<xc<<endl;
}
if(sx==1&&zy==0)//只能上下移动,y方向解决
{
//cout<<"the yc"<<endl;
cout<<yc<<endl;
}
if(sx==1&&zy==1)//都能动,选取最小的
{
cout<<min(xc,yc)<<endl;
}
}
}
}
}
限制:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output