HDU 2461 Rectangles#容斥原理

http://acm.hdu.edu.cn/showproblem.php?pid=2461

题目很简单,但是由于询问数M可以很大,所以容易超时,这道题学到了在结构体里面写函数的方法,这样子效率更高,否则的话,这道题就TLE了。

 

根据容斥原理,先把每个小长方形的面积加上,然后看有没有与该小长方形相交的,用dfs实现,当相交面积为0时,则不进行dfs,且同样遵循奇加偶减(但代码里因为是以第二个作为depth=1开始进行dfs的,所以是奇减偶加)。

 

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;struct Node
{int x1,x2,y1,y2;Node cross(Node &R){Node tmp;tmp.x1=max(x1,R.x1);tmp.y1=max(y1,R.y1);tmp.x2=min(x2,R.x2);tmp.y2=min(y2,R.y2);return tmp;}int area(){if(x1>=x2||y1>=y2) return 0;return (x2-x1)*(y2-y1);}
}node[25];int num,r[25],ans;
void dfs(int depth,Node R,int index)
{Node tmp;for(int i=index;i<=num;i++){tmp=R.cross(node[r[i]]);if(tmp.area()){if(depth&1)ans-=tmp.area();else ans+=tmp.area();dfs(depth+1,tmp,i+1);}}
}int main()
{int n,m,cas=0;while(scanf("%d%d",&n,&m)&&n+m){cas++;for(int i=1;i<=n;i++)scanf("%d%d%d%d",&node[i].x1,&node[i].y1,&node[i].x2,&node[i].y2);printf("Case %d:\n",cas);for(int i=1;i<=m;i++){ans=0;scanf("%d",&num);for(int j=1;j<=num;j++)scanf("%d",&r[j]);for(int j=1;j<=num;j++){ans+=node[r[j]].area();dfs(1,node[r[j]],j+1);}printf("Query %d: %d\n",i,ans);}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/atmacmer/p/5293586.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LD3320语音识别模块二次开发及与树莓派间的通讯

实物图如下&#xff1a; 一般这种模块的资料厂家都会给&#xff0c;需要的话可以私信我发邮箱&#xff0c;下面介绍该模块的各种参数。型号&#xff1a;YS-LDV7名称&#xff1a;一体化语音识别模块规格&#xff1a;43*29.7MM供电电压&#xff1a;5V &#xff08;内部工作电压…

HTTP的长链接和短链接说明

HTTP的长链接和短链接实际上是TCP的长连接和短链接。首先我们先介绍一下TCP/IP协议组四层模型。其中包括以下&#xff1a; 应用层&#xff1a;HTTP、FTP、DNS、TELNET等协议传输层&#xff1a;TCP、UDP网络层&#xff1a;IP、ARP、RARP、ICMP协议等网络接口层&#xff1a;是TC…

多生产者_你是生产者还是消费者?这决定了你的层次。

不知道你有没有注意到&#xff0c;每天乘坐地铁上下班的时候&#xff0c;大部分人都在刷剧、看视频、打游戏等等&#xff0c;总之都属于玩乐。用生产和消费的关系来看的话&#xff0c;其实这一大部分人都属于消费者&#xff0c;“时间和注意力”是他们用于交换的筹码&#xff1…

eclipse Android 开发基础 Activity 窗体 界面

eclipse Android 开发基础 新建工程 新建布局layout,new Android Activity就相当于窗体Form。 新建Activity自动生成src下同名的java代码。 public class Tform2activity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(saved…

8 种常被忽视的 SQL 错误用法

来源&#xff1a;http://t.cn/R6UMaA11、LIMIT 语句2、隐式转换3、关联更新、删除4、混合排序5、EXISTS语句6、条件下推7、提前缩小范围8、中间结果集下推总结sql语句的执行顺序&#xff1a;FROM <left_table>ON <join_condition><join_type> JOIN <right…

变频器按启动没反应_起重机软启动柜晶闸管损坏维修几大故障

缺相保护功能&#xff1a;工作时&#xff0c;软起动器随时检测三相线电流的变化&#xff0c;一旦发生断流&#xff0c;即可作出缺相保护反应。过热保护功能&#xff1a;通过软起动器内部热继电器检测晶闸管散热器的温度&#xff0c;一旦散热器温度超过允许值后自动关断晶闸管&a…

Redis 的各项功能解决了哪些问题?

作者丨blackheart先看一下Redis是一个什么东西官方简介解释到&#xff1a;Redis是一个基于BSD开源的项目&#xff0c;是一个把结构化的数据放在内存中的一个存储系统&#xff0c;你可以把它作为数据库&#xff0c;缓存和消息中间件来使用。同时支持strings&#xff0c;lists&am…

python datetime用法_python datetime用法学习笔记

一、主要思路&#xff1a;1.把表示时间的str转换为datetime对象2.操作datetime对象输出期望的时间格式二、把表示时间的str转换为datetime对象语法&#xff1a;datetime.strptime(date_str, format)示例&#xff1a;date_str "2017-06-23 21:08:12"date_obj dateti…

RocketMQ集成SpringBoot

RocketMQ集成SpringBoot RocketMQ总体架构 RocketMQ基本特性

协议(Protocol)与委托代理(Delegate)

协议(Protocol)的作用&#xff1a; 1. 规范接口&#xff0c;用来定义一套公用的接口&#xff1b; 2. 约束或筛选对象。 代理(Delegate)&#xff1a; 它本身是一种设计模式&#xff0c;委托一个对象<遵守协议>去做某件事情&#xff0c;目的是为了降低对象间的耦合度&#…

ASP.NET Core 2.2+Quartz.Net 实现Web定时任务

作者&#xff1a;Julian_酱链接&#xff1a;http://www.cnblogs.com/mi12205599/p/10361763.html作为一枚后端程序狗&#xff0c;项目实践常遇到定时任务的工作&#xff0c;最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定…

lj245a引脚功能图_ULN2003A引脚图及功能-uln2003a原理

ULN是集成达林顿管IC&#xff0c;内部还集成了一个消线圈反电动势的二极管&#xff0c;可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压50V,电流500mA,输入电压5V,适用于TTL COMS,由达林顿管组成驱动电路。ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势…

RocketMQ核心概念

生产者Producer和消费者Consumer NameServer作用 Broker和Topic

交叉编译、软硬链接

什么是交叉编译&#xff1f;交叉编译是一个行为&#xff0c;是在一个平台上生成另一个平台上的可执行代码。 本地编译&#xff1a;本地编译可以理解为&#xff0c;在当前编译平台下&#xff0c;编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发&#xff0c;都是…

扫地机器人狗毛_扫地机器人:我是清理狗毛的!不是清理狗屎的!

原标题&#xff1a;扫地机器人&#xff1a;我是清理狗毛的&#xff01;不是清理狗屎的&#xff01;扫地机器人可以清洁地面和角落里的垃圾&#xff0c;对于满是毛毛的铲屎官家庭来说&#xff0c;简直就是福音呐&#xff01;不过最近&#xff0c;槽点却有点多&#xff1a;家里买…

Linus下安装maven

下载maven安装包 wget http://mirror.bit.edu.cn/apache/maven/binaries/apache-maven-3.2.2-bin.tar.gz 解压 tar -zxvf apache-maven-3.2.2-bin.tar.gz 配置maven环境变量 查看maven解压后安装包目录 vi /etc/profile 进入最底部&#xff0c;按insert,添加环境变量&#x…

linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

首先下载树莓派linux内核源码&#xff1a; 下载网址&#xff1a;https://github.com/raspberrypi/linux在树莓派使用指令&#xff1a;uname -r查看当前树莓派的版本号&#xff0c;然后选择对应的linux内核版本号进行下载。 将linux内核源码从共享文件夹拷贝到SYSTEM文件夹&am…

Linux实时查看进程命令top笔记

top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示Linux系统中各个进程的资源占用状况&#xff0c;类似于Windows系统的任务管理器功能。 top命令的语法格式&#xff1a; top [-] [d] [p] [q] [c] [C] [S] [s] [n] 常用参数说明 d 指定每两次屏幕信息刷新之间的时间…

C#基础之Equals和Dispose

1.equal()和运算符的区别 由于C#中有值类型和引用类型&#xff0c;那么相等也分为值相等和引用相等。先来看一个值类型简单的例子&#xff0c;顺便也写了string类型的比较。 static void Main(string[] args){int n1 1;int n2 1;Console.WriteLine(n1n2);Console.WriteLine(n…