PKU1151线段树解法

模仿别人的代码写的
这题不用线段树也可以过
None.gif #include  < stdio.h >
None.gif#include 
< string .h >
None.gif#include 
< stdlib.h >
None.gif
None.gif
struct  line
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
double x, y1, y2;
InBlock.gif    
int in;
ExpandedBlockEnd.gif}
;
None.gif
None.gif
struct  node
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    node 
* pl, * pr;
InBlock.gif    
int iL, iR;
InBlock.gif    
double left, right;
InBlock.gif    
double y_len;
InBlock.gif    
int in;
ExpandedBlockEnd.gif}
mem[ 404 ];
None.gif
None.gifline l[
202 ];
None.gif
double  y[ 202 ];
None.gif
int  n;
None.gif
double  sum;
None.gif
int  nodeCnt;
None.gif
None.gifnode 
*  newNode()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    node 
* pt=&mem[nodeCnt++];
InBlock.gif    memset(pt,
0,sizeof(pt));
InBlock.gif    
return pt;
ExpandedBlockEnd.gif}

None.gif
None.gifnode 
*  buildTree( int  il,  int  ir)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    node 
* root=newNode();
InBlock.gif    root
->iL=il;
InBlock.gif    root
->iR=ir;
InBlock.gif    root
->left=y[il];
InBlock.gif    root
->right=y[ir];
InBlock.gif    
if(ir - il > 1)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
int mid = (il + ir)/2;
InBlock.gif        root
->pl=buildTree(il,mid);
InBlock.gif        root
->pr=buildTree(mid,ir);
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return root;
ExpandedBlockEnd.gif}

None.gif
None.gif
void  length(node  *  root)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    root
->y_len=0;
InBlock.gif    
if(root->in)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        root
->y_len= root->right - root->left;
ExpandedSubBlockEnd.gif    }
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if(root->pl)
InBlock.gif            root
->y_len+=root->pl->y_len;
InBlock.gif        
if(root->pr)
InBlock.gif            root
->y_len+=root->pr->y_len;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
void  update(node  *  root, line ll)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(root->left==ll.y1 && root->right==ll.y2)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        root
->in += ll.in;
InBlock.gif        length(root);
InBlock.gif        
return;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
if(root->iR - root->iL <=1 )
InBlock.gif        
return;
InBlock.gif    
if(root->pl->right > ll.y1)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if(root->pl->right >= ll.y2)
InBlock.gif            update(root
->pl, ll);
InBlock.gif        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            line temp
=ll;
InBlock.gif            temp.y2
=root->pl->right;
InBlock.gif            update(root
->pl, temp);
InBlock.gif            temp
=ll;
InBlock.gif            temp.y1
=root->pr->left;
InBlock.gif            update(root
->pr,temp);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        update(root
->pr, ll);
ExpandedSubBlockEnd.gif    }

InBlock.gif    length(root);
InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif
int  cmp1(  const   void   * a , const   void   * b)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
return (*(line *)a).x > (*(line *)b).x ? 1 : -1;
ExpandedBlockEnd.gif}

None.gif
None.gif
int  cmp2( const   void   *  a,  const   void   *  b)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
return (*(double *)a) > (*(double *)b) ? 1 : -1;
ExpandedBlockEnd.gif}

None.gif
None.gif
int  main()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
int T=1;
InBlock.gif    
while(scanf("%d"&n)==1 && n)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        nodeCnt
=0;
InBlock.gif        memset(l,
0,sizeof(l));
InBlock.gif        memset(y,
0,sizeof(y));
InBlock.gif        memset(mem,
0,sizeof(mem));
InBlock.gif        
int i;
InBlock.gif        
for(i = 0; i < n; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            scanf(
"%lf%lf%lf%lf"&l[2*i].x, &l[2*i].y1, &l[2*i+1].x, &l[2*i+1].y2);
InBlock.gif            l[
2*i].y2=l[2*i+1].y2, l[2*i+1].y1=l[2*i].y1;
InBlock.gif            l[
2*i].in=1, l[2*i+1].in=-1;
InBlock.gif            y[
2*i]=l[2*i].y1, y[2*i+1]=l[2*i].y2;
ExpandedSubBlockEnd.gif        }

InBlock.gif        qsort(l, 
2*n, sizeof(l[0]), cmp1);
InBlock.gif        qsort(y, 
2*n, sizeof(y[0]), cmp2);
InBlock.gif
InBlock.gif        node 
* root= buildTree(0,2*n-1);
InBlock.gif
InBlock.gif        sum
=0;
InBlock.gif
InBlock.gif        
for(i = 0; i < 2 * n - 1; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            update(root, l[i]);
InBlock.gif            sum 
+= (root->y_len) * (l[i+1].x - l[i].x);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        printf(
"Test case #%d\nTotal explored area: %.2f\n\n",T++,sum);
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/SQL/archive/2007/10/23/934721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PKU VehicleID数据集是由北京大学智能交通与多媒体实验室提供的一个用于车辆识别的图像数据库。该数据集包含了车辆在不同环境、不同拍摄条件下的图像,旨在用于车辆相关研究的数据训练和测试。 PKU VehicleID数据集收集了超过8万辆车的图像,涵盖了2000多个车型和16000多个车例。这些图像是在不同的拍摄条件下捕捉到的,包括不同的光照、天气、角度和距离。这使得该数据集在车辆识别和相关研究领域具有较高的多样性和可用性。 PKU VehicleID数据集不仅提供了车辆图像,还包含了车辆的标注信息,如车辆类型、颜色、品牌等。这些标注信息为研究者提供了更多的可用数据,可以辅助他们进行车辆特征识别、车辆分类等相关研究。 PKU VehicleID数据集可以广泛应用于车辆识别、车辆检测、交通监控等领域的研究和实践中。通过利用该数据集,研究者可以进行车辆模型的建立与识别、车辆行为的分析与预测等工作,从而为智能交通和城市管理提供更好的技术支持和解决方案。 综上所述,PKU VehicleID数据集是一个丰富的车辆图像数据库,它提供了大量的车辆图像和标注信息,为车辆识别和相关研究领域的研究者提供了重要的资源和工具。通过该数据集的应用,我们可以更好地理解和研究车辆特征识别、车辆分类等问题,为智能交通和城市管理带来更多的创新和进步。 ### 回答2: PKU VehicleID数据集是由北京大学人工智能与自动化研究所于2016年发布的一个车辆检测和识别的数据集。这个数据集主要包含了来自北京市道路监控系统的车辆图像和相关的车辆属性信息。 PKU VehicleID数据集的特点主要有以下几点。首先,该数据集包含了非常大量的车辆图像,总计约50万张,涵盖了丰富的场景和车型样本。其次,这些图像都是以野外真实道路监控视频截取得到的,具有较高的真实性和复杂性。此外,数据集中的每一辆车都被分配了一个唯一的ID号码,用于标识和跟踪车辆。最后,PKU VehicleID数据集还提供了诸如车辆类型、颜色、品牌等属性信息,方便进行车辆属性识别和分类任务。 PKU VehicleID数据集在车辆检测、跟踪和识别领域有着广泛的应用价值。通过利用这个数据集,可以开展车辆检测算法的研究和性能评估。同时,也可以进行车辆属性识别、车型分类等应用任务的研究。这个数据集的发布对于提升车辆智能监控和交通管理系统的性能具有重要意义。此外,PKU VehicleID数据集还可以为自动驾驶、交通安全和交通流量分析等领域的研究提供有价值的实验数据基础。总之,PKU VehicleID数据集是一个丰富而有用的资源,为车辆相关研究提供了有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值