POJ 3347 特殊方法
来源:互联网 发布:举重知乎 编辑:程序博客网 时间:2024/06/10 06:32
题意:给予n个正方形,要求45°角放置,最左边的正方形紧贴Y轴,所有的正方形的下面的端点都在X轴上。然后按照正方形不能交错但要尽可能的挨着的原则,摆放,最后输出从上往下看能看到的正方形的编号。
这题先可以扩大√2倍。
1确定正方形左端点的位置的方法:遍历之前的正方形求与之前每个正方形挨着的最大值。
2根据左端点坐标求出右端点坐标。
3将正方形看作线段,如果这条线段存在没有被其他线段遮挡的区域那么这个正方形可以输出。
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct sq{ int l,r,len;};int getl(sq a,sq b){ if(a.len<=b.len) return b.l+b.len+a.len; else return b.r+b.len-a.len;}int main(){ int n; sq data[55]; while(~scanf("%d",&n),n) { for(int i=0; i<n; i++) { scanf("%d",&data[i].len),data[i].l=0; for(int j=0; j<i; j++) data[i].l=max(getl(data[i],data[j]),data[i].l); data[i].r=data[i].l+2*data[i].len; } for(int i=1; i<n; i++) for(int j=0; j<i; j++) { if(data[i].len<data[j].len&&data[i].l<data[j].r) data[i].l=data[j].r; else if(data[i].len>data[j].len&&data[i].l<data[j].r) data[j].r=data[i].l; } for(int i=0; i<n; i++) if(data[i].l<data[i].r) printf("%d ",i+1); printf("\n"); } return 0;}
- POJ 3347 特殊方法
- Poj 3411 Paid Roads (DFS 特殊标记方法)
- POJ-8469 特殊密码锁
- POJ求特殊自然数
- POJ特殊密码锁
- Python中的特殊方法
- [note]特殊方法
- fis3 一些特殊方法
- Python 进阶特殊方法
- Python的特殊方法
- 字符串特殊字符特殊处理方法:stringByTrimmingCharactersInSet
- jQuery load()方法特殊用法!
- list的特殊排序方法
- ThinkPHP快捷方法、特殊字符串
- 【转】 python特殊方法函数
- 特殊站点部署方法之一
- 过滤特殊字符的方法
- final()方法的特殊情况
- #hive_正则表达式#JAVA的正则表达式案例详解
- mknod 命令
- java实现批量下载
- qt的右键扩展,继承contextMenuEvent
- 【划分树】MinimumSum
- POJ 3347 特殊方法
- std::string的Copy-on-Write:不如想象中美好 转载
- 2013年4月_武科大程序设计大赛(复赛-非专业组)_解题报告(problem 1001)
- 未登录用户自动跳回登陆界面——拦截器interceptor
- uva_11729_Commando War(貪心)
- 分区:在线重定义:DBMS_REDEFINITION
- CString 转 unsigned char *
- stl中有序结构的操作
- 2013年4月_武科大程序设计大赛(复赛-非专业组)_解题报告(problem 1002)