拆分-洛谷P2745 [USACO5.3]窗体面积Window Area

https://www.luogu.org/problem/show?pid=2745
本来因为会WA的,结果AC了,啊哈哈哈哈哈哈哈哈哈
因为题目要求我们要把一个个平面有先后关系,那么我们就搞一个队列嘛,每次询问时,不断把平面上升就好了;
但是一个平面被另一个平面挡住一部分,剩下的可以简单得理解为4个部分:
上下左右
111122
111122
440022
440022
443333
443333
如图,大矩形被小矩形(以0表示),可以分为1 2 3 4 个部分;
我给大家一个正确的程序
表示矩形A左上角(x1,y1)右下角(x2,y2)被矩形B(xy同理)遮挡后的面积;

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define Ll long long
using namespace std;
int ans,x1,y1,x2,y2,x3,y3,x4,y4,xx,yy,xxx,yyy;
void pd(int x,int y,int xx,int yy){if(x==xx||y==yy)return;ans+=(xx-x)*(yy-y);
}
int main()
{cin>>x1>>y1>>x2>>y2;cin>>x3>>y3>>x4>>y4;if(x3>=x2||y3>=y2||x4<=x1||y4<=y1){ans+=(x2-x1)*(y2-y1);}elseif(x1>=x3&&x2<=x4&&y1>=y3&&y2<=y4){ans=0;}else{pd(x1,y1,max(x3,x1),min(y4,y2));pd(x1,min(y2,y4),min(x2,x4),y2);pd(min(x2,x4),max(y1,y3),x2,y2);pd(max(x3,x1),y1,x2,max(y1,y3));}cout<<ans;
}

AC代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<map>
#define Ll long long
using namespace std;
map<char,int>F;
int a[1000][4];
string s;
char c;
int ll,k,lll,ans;
void dfs(int x1,int y1,int x2,int y2,int k){//printf("%d %d %d %d %d\n",x1,y1,x2,y2,k);if(x1==x2||y1==y2)return;if(k>ll){ans+=(x2-x1)*(y2-y1);return;}int x3=a[k][0],y3=a[k][1],x4=a[k][2],y4=a[k][3];if(x3>=x2||y3>=y2||x4<=x1||y4<=y1){dfs(x1,y1,x2,y2,k+1);return;}if(x1>=x3&&x2<=x4&&y1>=y3&&y2<=y4)return;dfs(x1,y1,max(x3,x1),min(y4,y2),k+1);dfs(x1,min(y2,y4),min(x2,x4),y2,k+1);dfs(min(x2,x4),max(y1,y3),x2,y2,k+1);dfs(max(x3,x1),y1,x2,max(y1,y3),k+1);
}
int main(){ll=100;lll=101;while(cin>>s){c=s[2];if(s[0]=='w'){ll++;F[c]=ll;k=4;for(int i=0;i<=3;i++){while(isdigit(s[k])){a[ll][i]=a[ll][i]*10+s[k]-48;k++;}k++;}int x=a[ll][0],y=a[ll][1],xx=a[ll][2],yy=a[ll][3];a[ll][0]=min(x,xx);a[ll][1]=min(y,yy);a[ll][2]=max(x,xx);a[ll][3]=max(y,yy);}elseif(s[0]=='t'){k=F[c];ll++;for(int i=0;i<=3;i++)a[ll][i]=a[k][i],a[k][i]=1e8;F[c]=ll;}elseif(s[0]=='b'){k=F[c];lll--;for(int i=0;i<=3;i++)a[lll][i]=a[k][i],a[k][i]=1e8;F[c]=lll;}elseif(s[0]=='d'){k=F[c];for(int i=0;i<=3;i++)a[k][i]=1e8;F[c]=0;}else{ans=0;k=F[c];dfs(a[k][0],a[k][1],a[k][2],a[k][3],k+1);k=(a[k][2]-a[k][0])*(a[k][3]-a[k][1]);double kill=double(ans)/double(k);kill*=double(100);printf("%.3lf\n",kill);}}
}

转载于:https://www.cnblogs.com/largecube233/p/6797963.html

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

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

相关文章

java搭建tcp客户端_【Java学习笔记】TCP客户端/服务器端

客户端&#xff1a;import java.net.Socket;import java.net.InetAddress;import java.net.UnknownHostException;import java.io.OutputStream;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;impor…

SQLServer表分区

use Test--1分区函数CREATE PARTITION FUNCTION IDRange(int) AS RANGE LEFT FOR VALUES ( 99999999,199999999, 299999999) USE master--2然后我们需要添加相应的文件组 .我使用的是TestData文件组.ALTER DATABASE Test ADD FILEGROUP [TestData] ALTER DATABASE TestADD FILE…

Oracle集合查询

union&#xff1a;简单的返回查询检索出的所有行&#xff0c;但对重复行只返回一次 union all&#xff1a;返回查询检索的说有行&#xff0c;包括所有重复行 intersect&#xff1a;返回两个查询的共有行&#xff0c;即返回一次重复行 minus&#xff1a;返回第一个查询中去掉第二…

JAVA开发需求分析套路_JAVA并发工具常用设计套路示例代码

了解JAVA并发工具常用设计套路前言在学习JAVA并发工具时&#xff0c;分析JUC下的源码&#xff0c;发现有三个利器&#xff1a;状态、队列、CAS。状态一般是state属性&#xff0c;如AQS源码中的状态&#xff0c;是整个工具的核心&#xff0c;一般操作的执行都要看当前状态是什么…

使用PXE+VNC方式安装CentOS 7

U盘坏了&#xff0c;用个下面的方法安装 安装配置dhcp yum -y install dhcp tftp-server 修改如下&#xff0c;网段改为你自己的网段 vim /etc/dhcp/dhcpd.confsubnet 172.16.1.0 netmask 255.255.255.0 {range 172.16.1.100 172.16.1.200;option subnet-mask 255.255.255.0;de…

Oracle常见错误

///ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄专用服务器选择了共享连接方式&#xff0c;修改(SERVER SHARED)为(SERVER DEDICATED)///ORA-12096,快照日志问题删除物化视图建的日志表DROP MATERIALIZED VIEW LOG ON [schema.]table;然后重建。///OracleExce…

Oracle DMP 导入导出

导出&#xff1a;运行-->输入cmd-->进入DOS环境-->输入命令&#xff1a;exp 用户名/密码数据库名 filexxx.dmp就可以实现数据库的导出了导入&#xff1a;CREATE USER username IDENTIFIED BY userpass;GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,DRO…

Shell 自定义函数

语法&#xff1a; function fname() { 程序段} 例子&#xff1a; #!/bin/bash## 定义函数,分子除以分母&#xff0c;算利润、占有率等## 参数1&#xff1a;分子## 参数2&#xff1a;分母function divfun() {## 参数判断,需要输入两个参数 if [ $# -ne 2 ];thenecho "Enter…

java kafka 集群消费_kafka集群简单生产者消费者实例

项目描述本项目是个简单的kafka集群简单生产者和消费者实例&#xff0c;生产者能生产消息&#xff0c;消费者能消费消息&#xff0c;这里将消费的消息存入了mysql数据库&#xff0c;适合刚kafka刚入门的朋友借鉴使用&#xff0c;里面的zookeeper集群和kafka集群的地址需要修改为…

微信小程序 body属性的问题

微信小程序里面没有了body这个节点了&#xff0c;取而代之的是page转载于:https://www.cnblogs.com/kugeliu/p/6370687.html

Oracle trunc函数

trunc对日期按格式截尾对数字按位数截尾trunc(-123.56,1) -123.5trunc(-123.56) -123trunc(-123.56,-1) -120

SQLServer获取最后插入生成的ID 不同方法

如果想获取跨任何会话或作用域的某个表的最新标识值&#xff0c;请使用IDENT_CURRENT。 如果想获取当前会话和当前作用域的任何表的最新标识值&#xff0c;请使用SCOPE_IDENTITY。 如果想获取当前会话中任何作用域的任何表的最新标识值&#xff0c;请使用IDENTITY。

java二叉树转换为链表_leetcode刷题笔记-114. 二叉树展开为链表(java实现)

leetcode刷题笔记-114. 二叉树展开为链表(java实现)题目描述给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a;展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的…

EJB是什么?EJB的概念分析与理解(copy)

【说明&#xff1a;转载于http://blog.csdn.net/jojo52013145/article/details/5783677】 1. 我们不禁要问&#xff0c;什么是"服务集群"&#xff1f;什么是"企业级开发"&#xff1f; 既然说了EJB 是为了"服务集群"和"企业级开发"&…

adb需要安装java吗_jdk和adb配置及电脑装爽系统心得

1.双系统安装我选择安装的windows10和Linux Mint 18.2索尼娅首先我们需要先安装win10&#xff0c;可以采用360压缩直接见将win10镜像解压到u盘当做系统盘使用(lInux也是一样)安装WIndows系统大家应该都会我主要说一下关于lInux的安装首先如果我们有固态硬盘的化可以考虑将其分成…

如何用JavaScript判断dom是否有存在某class的值?

例如&#xff1a; <html class"no-js"> <head> </head> <body> </body> </html> 判断html节点的class是否有no-js。 1.jquery的实现方式 $("html").hasClass(no-js); jquery源码的实现方式&#xff1a; var rclass /…