南邮 OJ 1484 烧饼重叠问题
2015-08-06 08:32
363 查看
烧饼重叠问题
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 87 测试通过 : 12
比赛描述
南邮三牌楼食堂继推出“佳逗”牌葱花大饼后,为庆祝2010级本科生、研究生入学,又推出“珍逗”牌芝麻烧饼,这种烧饼规则正四边形形状,大小各异。在制作烧饼时,首先要准备面粉、水、食用油、食盐等原料,然后将这些原料混合揉成面团,在面板上擀成规则正四边形的面片、面皮,用面皮把面卷包好,成为烧饼胚。最后铺芝麻,平底锅铺油,用中火或小火两面烙饼,直到两面金黄为止。
食堂师傅在制作烧饼过程中,多个烧饼胚同时放在平底锅(规则正四边形)上进行烤烙,有时烧饼胚摆放不好就会粘在一起。他们请你编程分析烧饼胚边界,判断这些烧饼是否重叠(最终会粘在一起)。为使问题简化,假设平底锅在一个平面上,分成若干单元块,每个单元块标有两个方向的坐标,其位置用左下角单元的坐标和右上角单元的坐标表示,(0,0)表示平底锅最左下角单元,如图1所示。请注意,如果一个烧饼包含另一个烧饼的一部分,则认为两个烧饼重叠;只有相邻的边或点,两个烧饼不重叠。
输入
输入首先给出同时烤烙的烧饼胚数量C,接着给出C个烧饼位置。
每一个烧饼位置用1行表示,格式为x1
y1 x2 y2,其中(x1,y1)表示烧饼左下角位置,(x2,y2) 表示烧饼右上角位置。
1≤C≤10,0≤x1,
y1, x2, y2≤19。
输出
如果同时烤烙的烧饼有重叠,则输出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"); } } }
相关文章推荐
- NSArray和NSMutableArray
- 南邮 OJ 1469 求和
- typeof() test demo
- LeetCode Single Number II
- 利用Mono.Cecil动态修改程序集来破解商业组件
- LeetCode Single Number II
- 【OC06】类目、延展、协议、计时器(连载八)
- linux挂载光盘,U盘
- 登陆界面的完善
- MVC框架介绍
- 文件目录和库
- JavaScript权威指南_149_第15章_脚本化文档_15.10-其他文档特性-可编辑的内容
- Python编译器实现内幕:添加一个新语句
- 南邮 OJ 1464 Text Messaging
- Python编译器实现内幕:添加一个新语句
- 为何大多数人做出来的图表只是一坨屎?
- PHP register_shutdown_function函数详解
- JAVA基础一大堆0805线程
- UIButton和UITextfield
- 平日收集的理财信息