首页 > 其他分享 >POJ3695(矩形切割中等题)

POJ3695(矩形切割中等题)

时间:2023-05-31 18:38:43浏览次数:56  
标签:矩形 切割 LL y1 x2 x1 y2 POJ3695


题目:Rectangles

 

题意:给N个矩形,他们可能会重叠,然后给M个询问,每个询问给出指定的矩形位置,然后分别计算每个询问中选中的矩形的并。

 

本题跟求所有矩形的并一个思路,只是再增加一个数组来保存选中矩形的位置,然后直接求并即可。

#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

#define LL __int64

const int N = 45;

typedef struct
{
    LL x1,y1;
    LL x2,y2;
    LL sum;
}Node;

Node T[N];

LL a[N];

LL n,m,r;

void Cover(LL x1,LL y1,LL x2,LL y2,LL k)
{
    while(k<r&&(x1>=T[a[k]].x2||x2<=T[a[k]].x1||y1>=T[a[k]].y2||y2<=T[a[k]].y1)) k++;
    if(k>=r)
    {
        T[a[k-1]].sum+=(x2-x1)*(y2-y1);
        return;
    }
    if(x1<T[a[k]].x1)
    {
        Cover(x1,y1,T[a[k]].x1,y2,k+1);
        x1=T[a[k]].x1;
    }
    if(x2>T[a[k]].x2)
    {
        Cover(T[a[k]].x2,y1,x2,y2,k+1);
        x2=T[a[k]].x2;
    }
    if(y1<T[a[k]].y1)
    {
        Cover(x1,y1,x2,T[a[k]].y1,k+1);
        y1=T[a[k]].y1;
    }
    if(y2>T[a[k]].y2)
    {
        Cover(x1,T[a[k]].y2,x2,y2,k+1);
        y2=T[a[k]].y2;
    }
}

int main()
{
    LL i,tt,t=1;
    while(~scanf("%I64d%I64d",&n,&m))
    {
        if(n==0&&m==0) break;
        memset(T,0,sizeof(T));
        for(i=0;i<n;i++)
            scanf("%I64d%I64d%I64d%I64d",&T[i].x1,&T[i].y1,&T[i].x2,&T[i].y2);
        printf("Case %I64d:\n",t++);
        tt=1;
        while(m--)
        {
            for(i=0;i<n;i++)
                T[i].sum=0;
            scanf("%I64d",&r);
            memset(a,0,sizeof(a));
            for(i=0;i<r;i++)
            {
                scanf("%I64d",&a[i]);
                a[i]--;
            }
            for(i=r-1;i>=0;i--)
                Cover(T[a[i]].x1,T[a[i]].y1,T[a[i]].x2,T[a[i]].y2,i+1);
            LL ans=0;
            for(i=0;i<r;i++)
                ans+=T[a[i]].sum;
            printf("Query %I64d: ",tt++);
            printf("%I64d\n",ans);
        }
        puts("");
    }
    return 0;
}

 

标签:矩形,切割,LL,y1,x2,x1,y2,POJ3695
From: https://blog.51cto.com/u_16146153/6388737

相关文章

  • POJ1151(矩形切割入门题)
    题目:Atlantis 我的上一篇文章已经讲明了线段切割的思想,矩形切割就是把线段切割从一维推到二维就行了,思想都一样。#include<stdio.h>#include<string.h>constintN=205;typedefstruct{doublex1,y1;doublex2,y2;doublesum;}Node;NodeT[N];intn......
  • hdu 2830(矩形dp)
    解题思路:这道题是hdu1505的更加强版本,实际上理解了前面的两道题,这道题很简单了,只是多了一个排序的过程。仔细想想,为什么会是多了排序的过程。因为我们的目标还是找到最大的全1矩阵,那么之前的思路肯定是不变的,关键就在于矩形的列是可以交换的,而且可以交换多次。其实这里不要多去想交......
  • Unity 对多边形进行矩形分割和查找最大内接矩形
     花了点时间实现了对任意多边形进行矩形分割的功能,有需要的小伙伴可以点这里查看源码 一、实现效果:1、对图片里的内容进行矩形分割     2、对多边形顶点数据进行矩形分割    3、查找图片里内容的最大内接矩形    4、查找多边形顶点数据内的最大内......
  • 剑指 Offer II 039. 直方图最大矩形面积
    题目链接:剑指OfferII039.直方图最大矩形面积方法:单调栈解题思路以直方图中的某一条为高的最大(面积)矩形的宽度为\(r-l+1\),其中\(r\)表示在其右边第一个小于(或等于)当前高度的下标,\(l\)表示在其左边第一个小于当前高度下标。\(l\),\(r\)可以利用单调栈在\(O(1)......
  • linux服务器,nginx日志切割保存
    我们都知道,默认情况下,nginx的项目log是一直被累计写入的,随着时间越久,那么这个文件就会越大,这个时候如果我们要去做一些查找和排查就会比较困难,因为日志文件太大,操作起来比较费劲。因此我们为了规避这个问题,提出日志切割的方案。那日志切割的原理是怎么样的,我们来分析一下,我们先......
  • JAVA List和Map切割方法
    importorg.springframework.util.CollectionUtils;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;publicclassCollectionUtil{/***将map切成段,作......
  • Q420MC力学性能、Q420MC切割加工、Q420MC期货订轧
    一、Q420MC钢板简介:Q420MC钢板系列有:Q420MB、Q420MC、Q420MD、Q420ME。Q、表示屈服强度“屈”字的拼音首字母;420是屈服值,M热机械轧制,C代表级别,表示钢板是0度冲击;当需方要求钢板具有厚度方向性能时,则在上述规定的牌号后加上代表厚度方向(Z向)性能级别的符号,如:Q420MCZ15、Q420MCZ......
  • Q420NE高强钢、Q420NE执行标准、Q420NE切割加工
    一、Q420NE钢板简介:Q420NE是低合金高强度钢板,Q420NE其中N的意思是正火轧制或者正火的意思,E是-40°冲击同级别牌号还有Q420NB/Q420NC/Q420ND。Q420NE可做Z向性能等级:Z15/Z25/Z35材质书会有体现,Q420NE执行标准按照GB/T1591-2018标准生产。二、Q420NE钢板化学成分:CSiMnPSNiCrMoCuNb......
  • P460NH力学性能、P460NH执行标准、P460NH切割加工
    一、P460NH钢板简介:P460NH钢板是欧标压力容器用钢板460是它的屈服强度,N在钢板是正火或正火轧制的意思。P460NH执行标准:EN10028-3-2003。二、P460NH钢板化学成分:CSiMnPSNiCrMoCuNbVTiAltN≤0.2≤0.61.1~1.7≤0.025≤0.015≤0.8≤0.3≤0.1≤0.7≤0.05≤0.2≤0.03≥0.02≤0.025三、P......
  • 激光切割机打标机雕刻机打码机控制系统上位机源码,完全自主开发,控制系统用stm32f407平
    激光切割机打标机雕刻机打码机控制系统上位机源码,完全自主开发,控制系统用stm32f407平台开发,上位机用C#开发,上位机具备x.y.z手动控制功能,圆弧插补,画正弦波,直线,往复运动,回原点,激光开关控制,强度设定等功能,速度和移动距可设置,圆弧插补输入半径即可。在上位机点击导入坐标文件会打开选......