zoukankan      html  css  js  c++  java
  • [二分][dfs]JZOJ 2748 最大立方体空间 80%做法

    Description

    给出一个长方体的箱子,还有在箱子里面的N个长方体的盒子,箱子和盒子的各个边都是平行于某个三维坐标轴。现在要求你找出其中最大的立方体空间,输出它的长度。
    首先这个空间必须位于箱子里面,而且不能与其它的盒子占的空间冲突。这个空间也必须是各边平行于某个坐标轴。如下图所示。
    这里写图片描述

    题解

    二分枚举到可能的立方体长度
    然后用dfs判断是否成立
    在dfs中枚举每个盒子,如果与n个盒子都没有交集,继续往下搜
    如果有交集,向三个地方变化位置,这样就可以那80
    

    代码

    #include<cstdio>
    #include<memory.h>
    #include<iostream>
    using namespace std;
    int n,l,w,h;
    bool flag;
    struct edge{int x1,y1,z1,x2,y2,z2;}k[2000];
    void search(int x,int y,int z,int dep,int s)
    {
        if (flag) return;
        int xx=x+s,yy=y+s,zz=z+s;
        if (xx>l||yy>w||zz>h) return;
        if (dep>n) 
        {
            flag=1;
            return;
        }
        if (xx<=k[dep].x1||yy<=k[dep].y1||zz<=k[dep].z1||x>=k[dep].x2||y>=k[dep].y2||z>=k[dep].z2)
        {
            search(x,y,z,dep+1,s);
            return;
        }
        search(k[dep].x2,y,z,1,s);
        search(x,k[dep].y2,z,1,s);
        search(x,y,k[dep].z2,1,s);
    }
    bool check(int x)
    {
        flag=0;
        search(0,0,0,1,x);
        if (flag) return 1;else return 0;
    }
    int ef(int l,int r)
    {
        int x=-1,mid;
        while (l<=r)
        {
            mid=(l+r)>>1;
            if (check(mid))
            {
                x=mid;
                l=mid+1;    
            }
            else r=mid-1;
        }
        return x;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        for (int z=1;z<=t;z++)
        {
            scanf("%d%d%d%d",&n,&l,&w,&h);
            for (int i=1;i<=n;i++) scanf("%d%d%d%d%d%d",&k[i].x1,&k[i].y1,&k[i].z1,&k[i].x2,&k[i].y2,&k[i].z2);
            int ans=ef(0,min(l,min(w,h)));
            cout<<"Case "<<z<<": "<<ans<<endl;
        }
    }
  • 相关阅读:
    AWVS 安全渗透扫描
    Nmon 监控结果分析
    Jmeter 插件图表分析
    Nmon 安装
    子母钟系统(卫星时钟系统)在医院网络中的架设与设计
    从NTP网络授时到社交GPS千奇百怪的应用方式
    NTP网络时钟系统技术参数与详细介绍
    GPS北斗子母钟系统在某机场系统中的应用
    GPS北斗时间频率信号源的定义及简介
    ntp对时服务器同步网络中计算机详细配置
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412244.html
Copyright © 2011-2022 走看看