首页 > 其他分享 >矩形面积和

矩形面积和

时间:2023-08-23 11:57:46浏览次数:34  
标签:cnt include int 面积 length xx x2 矩形

Smiling & Weeping

                  ---- 人的情况和树相同。

                它愈想开向高处和明亮处,它的根愈要向下,

                  向泥土,向黑暗处,向深处,向恶。

 

题目链接:Problem - 1255 (hdu.edu.cn)

求出覆盖多次的矩形面积(模板)

Talk is cheap , show me the code

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 #define ls(p) p<<1
 8 #define rs(p) p<<1|1
 9 const int N = 10005;
10 int tag[N];             // 标志:线段是否有效,能否用于计算宽度
11 double length[N][2];       // 存放区间i的总宽度
12 double xx[N];           // 存放x坐标值,下标用lower_bound()查询
13 struct ScanLine{
14     double y;
15     double right_x , left_x;
16     int inout;          // 入边为1,出边为-1
17     ScanLine(){}
18     ScanLine(double y , double x2 , double x1 , int io):
19     y(y),right_x(x2),left_x(x1),inout(io){}
20 }line[N];
21 bool cmp(ScanLine &a , ScanLine &b){ return a.y < b.y; } // 对y坐标排序
22 void push_up(int p , int pl , int pr){
23     if(tag[p]) length[p][0] = xx[pr]-xx[pl];
24     else if(pl+1 == pr) length[p][0] = 0;
25     else length[p][0] = length[ls(p)][0]+length[rs(p)][0];
26 
27     if(tag[p] > 1) length[p][1] = length[p][0];     // 完全覆盖
28     else if(pl+1 == pr) length[p][1] = 0;
29     else if(tag[p] == 1) length[p][1] = length[ls(p)][0]+length[rs(p)][0];
30     else    length[p][1] = length[ls(p)][1]+length[rs(p)][1];
31 }
32 void update(int L ,int R , int io , int p ,int pl ,int pr){
33     if(L<=pl && pr<=R){
34         tag[p] += io;
35         push_up(p,pl,pr);
36         return ;
37     }
38     if(pl+1 == pr) return ;     // 叶子结点
39     int mid = pl+pr >> 1;
40     if(L <= mid) update(L,R,io,ls(p),pl,mid);
41     if(R >  mid) update(L,R,io,rs(p),mid,pr);
42     push_up(p,pl,pr);
43 }
44 int main()
45 {
46     int t=0,n;
47     scanf("%d",&t);
48     while(t--){
49         scanf("%d",&n);
50         int cnt=0;
51         while(n--){
52             double x1,x2,y1,y2;
53             // 输入矩形
54             scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
55             line[++cnt] = ScanLine(y1,x2,x1,1);
56             xx[cnt] = x1;
57             line[++cnt] = ScanLine(y2,x2,x1,-1);
58             xx[cnt] = x2;
59         }
60         sort(xx+1 ,xx+cnt+1);
61         sort(line+1 , line+cnt+1 , cmp);
62         int num = unique(xx+1,xx+1+cnt)-(xx+1);
63         memset(tag,0,sizeof(tag));
64         memset(length,0,sizeof(length));
65         double ans = 0;
66         // 扫描所有入边和出边
67         for(int i = 1; i <= cnt; i++){
68             int L,R;
69             ans += length[1][1]*(line[i].y-line[i-1].y);
70             L = lower_bound(xx+1 , xx+num+1 , line[i].left_x)-xx;
71             R = lower_bound(xx+1 , xx+num+1 , line[i].right_x)-xx;
72             update(L,R,line[i].inout,1,1,num);
73         }
74         printf("%.2f\n",ans);
75     }
76     return 0;
77 }

所谓无底深渊,下去,也是前程万丈

文章到此结束,我们下次再见

标签:cnt,include,int,面积,length,xx,x2,矩形
From: https://www.cnblogs.com/smiling-weeping-zhr/p/17650807.html

相关文章

  • R语言PCA主成分、lasso、岭回归降维分析全球气候变化对各国土地面积影响|附代码数据
    全文链接:http://tecdat.cn/?p=31445最近我们被客户要求撰写关于各国土地面积的研究报告,包括一些图形和统计输出。机器学习在环境监测领域的应用,着眼于探索全球范围内的环境演化规律,人类与自然生态之间的关系以及环境变化对人类生存的影响。课题着眼于环境科学中的近年来土地面......
  • 【剑指Offer】10、矩形覆盖
    【剑指Offer】10、矩形覆盖题目描述:我们可以用2X1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2X1的小矩形无重叠地覆盖一个2Xn的大矩形,总共有多少种方法?解题思路:我们可以以2X8的矩形为例。先把2X8的覆盖方法记为f(8),用1X2的小矩形去覆盖时,有两种选择:横着放或......
  • 矩形的对角线经过的小方格数量
    题目:  对于一个长度为m,宽为n的矩形,均分成m*n的小方格,求从左上角到右下角的对角线穿过多少个小方格?题解1:#include<iostream>#include<cmath>usingnamespacestd;intmain(){intn=1,t,a1=0,b1=0,a2,b2;//n计数器,a1、b1上一次统计过的长、宽方向......
  • c# - 如何在圆角 WPF 窗体中创建圆角矩形?
    我正在WPF中创建一个应用程序,我想要圆角。收到。现在窗体是无边框的,我正在尝试创建一个圆角矩形并将其放在顶部,使其看起来像Windows应用程序的顶部栏。我做不到。这是我的代码:<BorderCornerRadius="50,0,50,0"BorderBrush="Black"BorderThickness="2"Background="......
  • v-charts 自定义堆叠面积图背景颜色
    下载npmiv-charts-Smain.js引入importVeLinefrom'v-charts/lib/line.common'Vue.component(VeLine.name,VeLine)使用<ve-line:data="chartData":settings="chartSettings"></ve-line>exportdefault{data(){......
  • java opencv在图片上绘制 矩形
    javaopencv在图片上绘制矩形 packagecom.vfsd.core;importorg.opencv.core.Core;importorg.opencv.core.CvType;importorg.opencv.core.Mat;importorg.opencv.core.Point;importorg.opencv.core.Rect;importorg.opencv.core.Scalar;importorg.opencv.highgu......
  • Vue中实现矩形和虚线的分离
    要在Vue中实现矩形和虚线的分离,你可以使用Vue的模板语法和样式绑定来实现。下面是一个示例代码,展示了如何使用Vue实现一个具有矩形和虚线的分离效果:<!DOCTYPEhtml><html><head><title>矩形和虚线分离</title><style>.rectangle{width:200px;......
  • C# picturebox画矩形、圆
    usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespace自定义画矩形{///<summary>///类型:1、画矩形2、画圆///绘制按钮:drawState=t......
  • opencv检测黑色轮廓(矩形)
    opencv检测黑色轮廓:importcv2importnumpyasnpclassShapeDetector:def__init__(self,image_path):self.image_path=image_pathself.img=cv2.imread(self.image_path)#读取图像self.imgContour=self.img.copy()#创建一个用......
  • #yyds干货盘点# LeetCode程序员面试金典:矩形区域不超过 K 的最大数值和
    1.简述:给你一个mxn的矩阵matrix和一个整数k,找出并返回矩阵内部矩形区域的不超过k的最大数值和。题目数据保证总会存在一个数值和不超过k的矩形区域。 示例1:输入:matrix=[[1,0,1],[0,-2,3]],k=2输出:2解释:蓝色边框圈出来的矩形区域 [[0,1],[-2,3]] 的数值和是......