首页 > 其他分享 >POJ1151(矩形切割入门题)

POJ1151(矩形切割入门题)

时间:2023-05-31 18:38:20浏览次数:79  
标签:POJ1151 y2 入门 int double x1 y1 x2 矩形


题目:Atlantis

 

我的上一篇文章已经讲明了线段切割的思想,矩形切割就是把线段切割从一维推到二维就行了,思想都一样。

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

const int N = 205;

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

Node T[N];

int n;

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

int main()
{
    int i,k=1;
    while(~scanf("%d",&n),n)
    {
        for(i=0;i<n;i++)
        {
            scanf("%lf%lf%lf%lf",&T[i].x1,&T[i].y1,&T[i].x2,&T[i].y2);
            T[i].sum=0;
        }
        for(i=n-1;i>=0;i--)
            Cover(T[i].x1,T[i].y1,T[i].x2,T[i].y2,i+1,i);
        double ans=0;
        for(i=0;i<n;i++)
           ans+=T[i].sum;
        printf("Test case #%d\n",k++);
        printf("Total explored area: %.2lf\n\n",ans);
    }
    return 0;
}

 

标签:POJ1151,y2,入门,int,double,x1,y1,x2,矩形
From: https://blog.51cto.com/u_16146153/6388738

相关文章

  • echarts入门教程(超级详细带案例)
    ————————————————版权声明:本文为CSDN博主「争儿不脱发」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/m0_55734030/article/details/127559434一.echarts的介绍1、echarts是一款基于JavaScript的数据可......
  • Three.js入门
    Three.js的核心五步就是:1.设置three.js渲染器2.设置摄像机camera3.设置场景scene4.设置光源light5.设置物体object1.设置three.js渲染器三维空间里的物体映射到二维平面的过程被称为三维渲染。一般来说我们都把进行渲染操作的软件叫做渲染器。具体来说要进行下面这些处理。(1......
  • Java入门|文件扩展名是什么?看完就明白了
    什么是文件扩展名?每一个文件都有文件扩展名,扩展名决定了文件的类型,什么是文件扩展名,例如:a.doc,文件的扩展名是doc,说明该文件是一个word文件a.txt,文件扩展名是txt,说明该文件是一个普通文本文件a.java,文件扩展名是java,说明该文件是一个Java文件a.mp4,文件扩展名是mp4,说明该文......
  • AngularJS directive入门例子
    这是《AngularJS》这本书里面提供的一个例子: JS代码:varexpanderModule=angular.module('expanderModule',[])expanderModule.directive('expander',function(){return{restrict:'EA',replace:true,transclude:true......
  • Drools 入门案例——手把手教你
    Drools入门案例#业务场景说明#业务场景:消费者在图书商城购买图书,下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下:规则编号规则名称描述1规则一所购图书总价在100元以下的没有优惠2规则二所购图书总价在100到200元的优惠20元3规则三所购图书总价在200到300元的优惠50......
  • Nebula入门学习——day4 nGQL中的图查询和其他算法
    MATCH¶MATCH语句提供基于模式(pattern)匹配的搜索功能。一个MATCH语句定义了一个搜索模式,用该模式匹配存储在NebulaGraph中的数据,然后用RETURN子句检索数据。本文示例使用测试数据集basketballplayer进行演示。 我自己最喜欢用的是:(root@nebula)[basketballplayer]>MATCH(......
  • Nebula入门学习——day3 nGQL指南
    什么是nGQL¶nGQL(NebulaGraphQueryLanguage)是NebulaGraph使用的的声明式图查询语言,支持灵活高效的图模式,而且nGQL是为开发和运维人员设计的类SQL查询语言,易于学习。nGQL是一个进行中的项目,会持续发布新特性和优化,因此可能会出现语法和实际操作不一致的问题,如果遇到此......
  • nebula入门学习——day1 nebula基本概念、原理和架构
    什么是NebulaGraph¶NebulaGraph是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。什么是图数据库¶图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)和......
  • consul的入门实例
    Consul是一个开源的分布式服务发现和配置管理系统,由HashiCorp开发。它提供了服务注册与发现、健康检查、KV存储、多数据中心支持等功能,旨在简化分布式系统的构建和管理。Consul的入门实例主要涉及以下步骤:准备工作:安装Consul:根据您的操作系统,从Consul官方网站下载并安装Cons......
  • Solr的入门实例
    当涉及到Solr的入门实例时,以下是一个详细的示例,展示了如何设置Solr服务器并执行索引和查询操作。准备工作:安装Solr:请按照Solr官方文档中的说明安装并启动Solr服务器。创建集合:在Solr控制台上创建一个名为"my_collection"的集合。添加文档:创建一个名为"solr-demo"的Cor......