POJ3347:Kadj Squares——题解
http://poj.org/problem?id=3347
题目大意:给定一些正方形的边长,让他们尽可能向左以45°角排列(不能互相重合),求在上面看只能看到哪几个正方形。
————————————————————
https://www.cnblogs.com/Ritchie/p/5491758.html
神犇的博客,我都是借(抄)鉴的……
#include<cstdio> #include<queue> #include<cctype> #include<cstring> #include<vector> #include<cmath> #include<algorithm> using namespace std; const int N=51; struct point{ int l,r; int len; }p[N]; int n,cnt; int main(){ while(scanf("%d",&n)!=EOF&&n){ memset(p,0,sizeof(p)); for(int i=1;i<=n;i++){ scanf("%d",&p[i].len); for(int j=1;j<i;j++){ p[i].l=max(p[i].l,p[j].r-abs(p[i].len-p[j].len)); } p[i].r=p[i].l+2*p[i].len; } for(int i=1;i<=n;i++){ for(int j=1;j<i;j++){ if(p[j].r>p[i].l){ if(p[j].len<p[i].len)p[j].r=p[i].l; else p[i].l=p[j].r; } } } bool f=0; for(int i=1;i<=n;i++){ if(p[i].l<p[i].r){ if(!f){ printf("%d",i); f=1; }else printf(" %d",i); } } putchar('\n'); } return 0; }