南邮 OJ 1484 烧饼重叠问题

烧饼重叠问题

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 87            测试通过 : 12 

比赛描述

南邮三牌楼食堂继推出“佳逗”牌葱花大饼后,为庆祝2010级本科生、研究生入学,又推出“珍逗”牌芝麻烧饼,这种烧饼规则正四边形形状,大小各异。在制作烧饼时,首先要准备面粉、水、食用油、食盐等原料,然后将这些原料混合揉成面团,在面板上擀成规则正四边形的面片、面皮,用面皮把面卷包好,成为烧饼胚。最后铺芝麻,平底锅铺油,用中火或小火两面烙饼,直到两面金黄为止。

食堂师傅在制作烧饼过程中,多个烧饼胚同时放在平底锅(规则正四边形)上进行烤烙,有时烧饼胚摆放不好就会粘在一起。他们请你编程分析烧饼胚边界,判断这些烧饼是否重叠(最终会粘在一起)。为使问题简化,假设平底锅在一个平面上,分成若干单元块,每个单元块标有两个方向的坐标,其位置用左下角单元的坐标和右上角单元的坐标表示,(0,0)表示平底锅最左下角单元,如图1所示。请注意,如果一个烧饼包含另一个烧饼的一部分,则认为两个烧饼重叠;只有相邻的边或点,两个烧饼不重叠。



输入

输入首先给出同时烤烙的烧饼胚数量C,接着给出C个烧饼位置。

每一个烧饼位置用1行表示,格式为x1 y1 x2 y2,其中(x1,y1)表示烧饼左下角位置,(x2,y2) 表示烧饼右上角位置。

1C100x1, y1, x2, y219


输出

如果同时烤烙的烧饼有重叠,则输出Overlap;没有重叠,则输出No Overlap


样例输入

3
1 1 2 2
2 5 4 7
4 2 7 3
2
1 1 2 2
2 2 5 3

样例输出

No Overlap
Overlap

题目来源

2010华为杯南邮校园程序设计大赛



/*  Wrong Answer at Test 2

#include<iostream>
#include<set>
using namespace std;

struct line{
	int x1,x2,y;
	bool isUp;
};

bool operator<(const line &l1, const line &l2){
	if(l1.y != l2.y){
		return l1.y < l2.y;
	}
	return l1.isUp > l2.isUp;			// 是下边缘的话 排在前面
}

int main(){
	int C,x1,y1,x2,y2,count;
	line l;
	bool overlap;
	set<int> xs;
	multiset<line> ls;
	set<int>::iterator it1,it2;
	multiset<line>::iterator it;
	while(scanf("%d",&C)==1){
		xs.clear();
		ls.clear();
		while(C--){
			scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
			xs.insert(x1);
			xs.insert(x2);
			l.x1 = x1;
			l.x2 = x2;
			l.y = y1;
			l.isUp = 0;
			ls.insert(l);
			l.y = y2;
			l.isUp = 1;
			ls.insert(l);
		}
		overlap = 0;
		it1=it2=xs.begin();
		it2++;
		while(!overlap && it2!=xs.end() ){
			count = 0;
			for(it=ls.begin(); !overlap && it!=ls.end(); ++it){
				if(it->x1 <= *it1 && it->x2 >= *it2){
					if(it->isUp){
						--count;
					}else{
						if(++count>1){
							overlap = 1;
							break;
						}
					}
				}
			}
			++it1;
			++it2;
		}
		if(overlap){
			printf("Overlap\n");
		}else{
			printf("No Overlap\n");
		}
	}
}
*/


#include<iostream>
#include<set>
#define MAX_N 20
using namespace std;

int a[MAX_N][MAX_N];

int main(){
	int C,x1,x2,y1,y2,i,j;
	bool overlap;
	while(scanf("%d",&C)==1){
		overlap = 0;
		memset(a,0,sizeof(a));
		while(C--){
			scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
			if(!overlap){
				for(i=x1;!overlap && i<=x2;i++){
					for(j=y1;!overlap && j<=y2;j++){
						if(++a[i][j]>1){
							overlap = 1;
							break;
						}
					}
				}
			}
		}
		if(overlap){
			printf("Overlap\n");
		}else{
			printf("No Overlap\n");
		}
	}
}






1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值