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 成文

posted @ 2021-11-16 21:12  hh2048  阅读(24)  评论(0编辑  收藏  举报