【计算几何】POJ_1262 地板覆盖问题(Input)

百炼2791-矩形覆盖-C语言-动态规划 感谢来自zml大佬的思路,按位记录占用状态真的是绝了。 /***************************************** **文件名:poj-2791 **Copyright (c) 2010-2020 OrdinaryCrazy **创建人:OrdinaryCrazy **日期:20170726 **描述:poj-2791参考答案 **版本:1.0 ************ 阅读详情

题意

在一个n∗mn*mn∗m的地板里放ttt块砖。
如果有砖交叉覆盖,则输出NONDISJOINTNONDISJOINTNONDISJOINT
否则如果有砖超出了地板,则输出NONCONTAINEDNONCONTAINEDNONCONTAINED
否则如果有部分地板没有被覆盖,则输出NONCOVERINGNONCOVERINGNONCOVERING
否则输出OKOKOK。

思路

这道题判断交叉比较关键,我们只要对它们的四个点进行判断就好了。

(r1.left<r2.right)&&(r2.left<r1.right)&&(r1.up<r2.down)&&(r2.up<r1.down)

剩下的部分直接判断即可。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>

struct node{
	int left, right, up, down;
}a[401];

int input() {
	char c = getchar();
	int f = 1, result = 0;
	while (c < '0' || c > '9') {
		if (c == '-') f = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		result = result * 10 + c - 48;
		c = getchar();
	}
	return result * f;
}

void solve() { 
	memset(a, 0, sizeof(a));
	int m = input(), n = input(), t = input();
	int s = n * m, sum = 0, over = 0;
	for (int i = 1; i <= t; i++) {
		a[i].left = input();
		a[i].up = input();
		a[i].right = input();
		a[i].down = input();
		if (a[i].up > a[i].down) std::swap(a[i].up, a[i].down);
		if (a[i].left > a[i].right) std::swap(a[i].left, a[i].right);
		sum += (a[i].down - a[i].up) * (a[i].right - a[i].left);
		if (a[i].left < 0 || a[i].left > m || a[i].up < 0 || a[i].up > n ||
			a[i].right < 0 || a[i].right > m || a[i].down < 0 || a[i].down > n)
				over = 1;
	}
	for (int i = 1; i <= t; i++)
		for (int j = i + 1; j <= t; j++) {
			if (a[i].left < a[j].right && a[j].left < a[i].right && a[i].up < a[j].down && a[j].up < a[i].down) {
				printf("NONDISJOINT\n");//判断交叉
				return;
			}
		}
	if (over) {//判断超出地板
		printf("NONCONTAINED\n");
		return;
	}
	else if (sum < s) {//判断没有被覆盖
		printf("NONCOVERING\n");
		return;
	}
	else printf("OK\n");
}

int main() {
	int q = input();
	for (; q; q--)
		solve();
}
状态压缩与动态规划(DP)---编程之美---瓷砖覆盖地板---POJ2411 一、状态压缩 从状态压缩的特点来看,这个算法适用的题目符合以下的条件: 1.解法需要保存一定的状态数据(表示一种状态的一个数据值) ,每个状态数据通常情况下是可以通过 2 进制来表示的。这就要求状态数据的每个单元只有两种状态,比如说棋盘上的格子,放棋子或者不放,或者是硬币的正反两面。这样用 0 或者 1 来表示状态数据的每个单元,而整个状态数据就是一个一串 0 和 1 组成的二进制数。 阅读详情

相关推荐

最大覆盖问题(问题描述+ 通过代码)

文件中有一份是 题目,另一份是已测试通过的代码

动态规划总结——经典问题总结

动态规划总结——经典问题总结 本文着重讨论状态是如何表示,以及方程是怎样表示的。当然,还附上关键的,有可能作为模板的代码段。但有的代码的实现是优化版的。 经典问题总结 最长上升子序列(LIS) 问题描述如下: 设L=…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=,其中k1 这里采用的是逆向思维的方法,从最后一个开始想起,即先从A[N](A数组是存放数据的数组,

qfikh的博客 5171

学习笔记之——Event Camera(事件相机)调研

概述 Event Camera是一种bio-inspired sensor,对应的领域为bio-inspired vision。对于传统的相机,从某种程度上,是捕获一个静态/静止的空间,而Event Camera的目的是:敏感地捕捉运动的物体。 对于传统RGB-camera,相机传回的信息是同步的,所谓同步,就是在某一时刻t,相机会进行曝光,把这一时刻所有的像素填在一个矩阵里回传,一张照片就诞生了。一张照片上所有的像素都对应着同一时刻。至于视频,不过是很多帧的图片,相邻图片间的时间间隔...

gwpscut的博客 3万+

poj 1262 地板覆盖问题

Problem一个地板被若干砖所覆盖。现在请你判断,这些砖是否恰好不重复,不遗漏的恰好覆盖了整个地板。 Input第一行为一个整数N,表示有N组测试数据。 每组测试数据第一行是两个数l, w,表示地板的长和宽(不超过40000)。 第二行是一个数t,表示有t块砖(1<=t<=400)。 下面t行每行是四个数,xl,yl,xh,yh,其中(xl,yl)是砖的左下角坐标,(xh,yh)是砖的右上

peter_zhu01的博客 938

实现 PDF 添加水印的五种方式

PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版权。本文将介绍如何使用 Spring Boot 来实现 PDF 添加水印的方式。

逸轩 6474

SAP SD实战:用BADI_SLS_HEAD_SCR_CUS给销售订单VA01/VA02加自定义字段(附完整函数组代码)

本文详细解析了在SAP SD模块中如何利用BADI_SLS_HEAD_SCR_CUS实现销售订单(VA01/VA02)的屏幕增强,包括数据结构设计、函数组创建和BADI接口实现。通过实战案例和完整代码,帮助开发者掌握在SAPMV45A标准流程中添加自定义字段的关键技术,提升业务定制化能力。

weixin_27015733的博客 369

Input_poj1262_计算几何

DescriptionIn a recent programming contest, one of the problems was about tiling floors with rectangular tiles. The input specification reads like this: The input contains several floors. The first l

olahiuj的博客 393

c++实现异步线程池并详细分析线程池析构流程

多线程编程是提高程序性能和响应能力的关键技术之一,异步线程池作为多线程编程的一种有效实现方式,能够管理和复用线程资源,避免频繁创建和销毁线程带来的开销。在本文中,我们将深入探讨如何实现一个异步线程池。

2301_76564925的博客 1599

Input poj 1262 计算几何

Problem一个地板被若干砖所覆盖。现在请你判断,这些砖是否恰好不重复,不遗漏的恰好覆盖了整个地板。Input第一行为一个整数N,表示有N组测试数据。 每组测试数据第一行是两个数l, w,表示地板的长和宽(不超过40000)。 第二行是一个数t,表示有t块砖(1<=t<=400)。 下面t行每行是四个数,xl,yl,xh,yh,其中(xl,yl)是砖的左下角坐标,(xh,yh)是砖的右

A_loud_name 454

一体化伺服电机与施耐德PLC TM241CEC24T在Canopen协议下的应用

一.硬件组成 软件组成:施耐德SoMachineV4.3二.○1.打开SoMachineV4.3,点击“新建项目”○2.点击“空白项目”○3.项目命名○4.点击“创建项目” 三. 点击“Logic Builder” 四. ○1.右击项目”PMM_CANOPEN_ST”添加设备○2.点击”LogicController”选择PLC型号TM241CEC24T/U○3.点击“添加设备” 五. ○1.右击CAN_1,添加设备○2.选择“CANopen Perfomance”○3.点击“添加设备”

m0_46512607的博客 2521

人工智能面试总结-Python

B站:啥都会一点的研究生 公众号试读:啥都会一点的研究生 目录说说Python程序运行过程?说说Python的作用域?说说Python的数据结构?说说Python中可变与不可变类型?说说进程与线程?说说Python中的多线程?说说Python中的多进程?说说Python互斥锁与死锁?说说Lambda?说说Python的深拷贝与浅拷贝?说说Python多线程是否能用多个CPU,为什么?说说Python垃圾回收机制?说说Python里的生成器?说说迭代器与生成器的区别?说说Python 列表的 del,rem.

啥都生的博客 1万+

地板覆盖问题O(n)解

题意:我们可以用11或21的小矩形,横着或竖着去覆盖一个更大的矩形(可以横盖或竖盖),请问恰好完全覆盖n列两行的大矩形,有多少种盖法? #include <iostream> #include <cstdio> #include <iomanip> #include <string> #include <cstdlib> #include...

Fawkess的博客 386

Kalibr 安装+制作采集的图片和IMU数据生成 .bag 文件 (坑最全,解决方法最简单,最详细哈哈)

方法一、Kalibr标定工具实现 开源代码连接:https://github.com/ethz-asl/kalibr 1.1 创建工作空间 ——下载程序——编译 mkdir -p ~/kalibr_workspace/src cd /kalibr_workspace/src git clone https://github.com/ethz-asl/Kalibr.git cd .. //返回上一级 catkin_make source devel/setup.bash ......

努力努力努力 6939

POJ 1262 Input 笔记

给出地板的长宽,铺 t 块地砖,给出地砖的左下角所在坐标和右上角所在坐标。求能铺成什么样。

woniupengpeng的专栏 263

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

poj1262

链接:http://poj.org/problem?id=1262  Input Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 629 Accepted: 268 Description In a recent program

JHC23的专栏 844

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

瓷砖覆盖地板问题

#include #include #include #include using namespace std; #define MAX_ROW 11 #define MAX_STATUS 2048 long long DP[MAX_ROW][MAX_STATUS]; int g_Width, g_Height; bool TestFirstLine(int

Antoine-进步 964

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

状态压缩动态规划 POJ 2411 (编程之美-瓷砖覆盖地板)

题目地址:http://poj.org/problem?id=2411 编程之美的课后题也有一个和整个题目一样的。(P269)  题目 这个题目的题意很容易理解,在一个N*M的格子里,我们现在有两种类型的 砖块,1 * 2 和 2 * 1,问一共有多少种方案,可以将整个N*M的空间都填满。 最简单的例子就是下面的了: 编程之美中题目: 某年夏天,位于希格玛大厦四层的微软亚洲研究

文西 1万+

瓷砖覆盖地板

问题:能否用1*2的瓷砖覆盖N* M的地板 扩展问题:        求用1*2的瓷砖覆盖2*M的地板有几种方式?

雪儿的专栏 1332

DP(动态规划) 铺瓷砖类问题poj等oj列表

刷完搜索后刷这个! poj 2411 poj 1038 sgu 131 sgu 132 sgu 223 sgu 225 zoj 1346 poj 3254 poj 1185 poj 3311 hdu 3001 poj 2288 zoj 4257 hdu 3681 poj 2430 poj 2436 poj 2541 poj 2836 poj 1699 poj 2288 poj 2688 poj

JayYe的专栏 4263

POJ 2411 插头dp

这个题找到的题解很好,把轮廓线的原理解释得非常清楚https://www.cnblogs.com/iiyiyi/p/5846864.html其中,重点是这样一句话:轮廓线状压的表示不是按照纵坐标大小从左到右,而是按照从左到右,从上至下的顺序(K4..K0)来的也就是说,当我们填写图中O这个格子的时候,只有K4 - K0的状态会有影响,其他的一定都是1:否则不合法那么,这个题的状态转移有三种:A:(...

ACdream 460

【漂浮法或线段树】 解决矩阵覆盖(计算几何)问题

HDU1542漂浮法怎么这么犀利~~~  (2010-11-24 18:38:22) 转载▼ 标签:  杂谈 分类: acm题目与算法

一地鸡毛 787

编程之美 4.2 瓷砖覆盖地板 扩展问题

原帖 http://blog.youkuaiyun.com/limchiang/article/details/8619611 题意:用 1 * 2 的瓷砖覆盖 n * m 的地板,问共有多少种覆盖方式? 思路:用2进制的01表示不放还是放,第i行只和i-1行有关,枚举i-1行的每个状态,推出由此状态能达到的i行状态:如果i-1行的出发状态某处未放,必然要在i行放一个竖的方块,所以我对

jeiwt的专栏 2721

☆【计算几何】信号覆盖

Description Input 输入第一行包含一个正整数 n, 表示房子的总数。接下来有 n 行,分别表示每一个房子的位置。对于 i = 1, 2, .., n, 第i 个房子的坐标用一对整数 xi和yi来表示,中间用空格隔开。 Output 输出文件包含一个实数,表示平均有多少个房子被信号所覆盖,需保证输出结果与精确值的绝对误差不超过0.01。 Sample Input 4

void* ptr = &OI; 978
上一篇: 【字符串哈希】CH_1401 兔子与兔子
下一篇: 【计算几何】SSL_1715 计算面积
nymph181
博客等级 码龄9年 40粉丝 458原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值