POJ 3347 Kadj Squares

Posted zmyzmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3347 Kadj Squares相关的知识,希望对你有一定的参考价值。

题意:

题目链接

思路:

最开始没思路不知道怎么判断
后来看了题解。。。
果然数据小(n<=50,len<=30)就可以随便瞎搞
开始时困扰我的是怎么求新加入的正方形的位置
原来是枚举已加入的每一个正方形,计算出紧挨当前正方形的位置,然后取max就可以了
至于正方形是否看得见
两两枚举判断(见代码)

code:(这道题其实看代码超级好理解)

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=60;
int n,l[N],r[N],len[N];
inline int read()
{
    int s=0,w=1; char ch=getchar();
    for(;'0'>ch||ch>'9';ch=getchar())if(ch=='-')w=-1;
    for(;'0'<=ch&&ch<='9';ch=getchar())s=(s<<1)+(s<<3)+(ch^48);
    return s*w;
}
int main()
{
    while(1)
    {
        n=read();
        if(!n) break;
        for(int i=1;i<=n;++i)
        {
            len[i]=read();l[i]=0;
            for(int j=1;j<i;++j)
                l[i]=max(l[i],r[j]-abs(len[i]-len[j]));
            r[i]=l[i]+2*len[i];
        }
        bool pd=0;
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<i;++j)
                if(len[j]>len[i]&&l[i]<r[j])l[i]=r[j];//左大右小
            for(int j=i+1;j<=n;++j)
                if(len[j]>len[i]&&r[i]>l[j])r[i]=l[j];//左小右大
            if(l[i]<r[i]) printf("%d ",i);
        }
        puts("");
    }
    return 0;
}

以上是关于POJ 3347 Kadj Squares的主要内容,如果未能解决你的问题,请参考以下文章

POJ3347:Kadj Squares——题解

POJ3347 Kadj Squares(计算几何&区间覆盖)

POJ 3347 Kadj Squares (线段覆盖)

POJ 3347 Kadj Squares (计算几何+线段相交)

poj 3347

扩大精度+思维——poj3347