CF1555B - Two Tables(暴力+数学规律+贪心+普及级)
CF1555B - Two Tables(源地址自⇔CF1555B)
Problem
见原题链接
tag:
⇔暴力、⇔数学规律、⇔贪心、⇔普及级(*1300)
题意:
给定的桌面上存在一个位置已知的矩形,现在要放入一个新的矩形,请问桌面上能否放得下,若能放下,至少需要将原矩形移动多少距离。
思路:
先计算判断能否放下(将原矩形移动到角落,留出最大空白面积,判断此时能否放下);再计算判断能否不移动就放下(将上下空白中较大的与新矩形的高比较,左右同理);最后再判断是上下移动结果较优还是左右移动结果较优。
此处想要强调的是,结果只与一个维度有关(原矩形上下移或左右移,不必考虑斜移的情况)。
AC代码:
//A WIDA Project
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const LL MAX18=1e18+5;
LL W, H, x, y, xx, yy, w, h, L, R, U, D, ans;
int main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int T;
cin >> T;
while(T -- > 0) {
ans = MAX18;
cin >> W >> H;
cin >> x >> y >> xx >> yy;
cin >> w >> h;
L = x;
R = W - xx;
U = H - yy;
D = y;
if(U + D < h && L + R < w) {
cout << -1 << endl;
continue;
}else if(h <= U || h <= D || w <= L || w <= R) {
cout << "0.000000000" << endl;
continue;
}
if(h <= U + D) ans = h - max(U, D);
if(w <= L + R) ans = min(ans, w - max(L, R));
cout << ans <<".000000000" << endl;
}
return 0;
}
错误次数:3次【补题3次】
原因:思路错误,且未发现本题答案只与一个维度有关。
【补题】原因:判断移动情况时出错( if
语句错误)
【补题】原因:ans
未赋初值
文 / WIDA
2021.11.16成文
首发于WIDA个人博客,仅供学习讨论*
更新日记:
2021.11.16 成文