USACO 5.3 Window Area (矩形切割,上浮法)

2015-03-30 21:03:02

思路:这道题... 不太好用扫描线来做... 

  我们给每个矩形一个优先级,越上面的优先级越高,由于同时存在添加、删除、置顶、置底多种操作,所以我们可以把优先级的初始值

赋值为一个较大的定值(不妨令为500),这么做的方便之处于,例如:对于第一次置底操作,我们可以让它的优先级=499,小于之前的所有矩形。

  接着,对于每一个查看操作,可以采用上浮法,一级一级考虑所有在该矩形上面的矩形(即优先级比它大的),把没有被遮住的部分不断上浮,直到顶上,得到可见的面积。

  上浮过程采用DFS递归累加,判断很巧妙,基本可以分成四个部分来算,从别人的博客那里学过来的。

(1)(2)(3)(4)

  1 /*
  2 ID:naturec1
  3 PROG: window
  4 LANG: C++
  5 */
  6 #include <cstdio>
  7 #include <cstring>
  8 #include <cstdlib>
  9 #include <cmath>
 10 #include <vector>
 11 #include <map>
 12 #include <set>
 13 #include <stack>
 14 #include <queue>
 15 #include <string>
 16 #include <iostream>
 17 #include <algorithm>
 18 using namespace std;
 19 
 20 #define MEM(a,b) memset(a,b,sizeof(a))
 21 #define REP(i,n) for(int i=0;i<(n);++i)
 22 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
 23 #define getmid(l,r) ((l) + ((r) - (l)) / 2)
 24 #define MP(a,b) make_pair(a,b)
 25 
 26 typedef long long ll;
 27 typedef pair<int,int> pii;
 28 const int INF = (1 << 30) - 1;
 29 const int MAXN = 10010;
 30 
 31 string str;
 32 int pmin,pmax;
 33 int tot,id[200];
 34 int pro[MAXN];
 35 
 36 struct Rec{
 37     int a1,b1,a2,b2;
 38     int pro;
 39     char id;
 40 }R[MAXN];
 41 
 42 int Dfs(int p,int a1,int b1,int a2,int b2){
 43     if(a1 >= a2 || b1 >= b2) return 0;
 44     if(p >= pmax) return (a2 - a1) * (b2 - b1);
 45     int res = 0,nxt = pro[p];
 46     if(pro[nxt] == -1) Dfs(p + 1,a1,b1,a2,b2);
 47     res += Dfs(p + 1,a1,b1,min(a2,R[nxt].a1),b2); //左半片
 48     res += Dfs(p + 1,max(a1,R[nxt].a2),b1,a2,b2); //右半片
 49     res += Dfs(p + 1,max(a1,R[nxt].a1),max(b1,R[nxt].b2),min(a2,R[nxt].a2),b2);
 50     res += Dfs(p + 1,max(a1,R[nxt].a1),b1,min(a2,R[nxt].a2),min(b2,R[nxt].b1));
 51     return res;
 52 }
 53 
 54 int Solve(int cur){
 55     int st = R[cur].pro + 1;
 56     return Dfs(st,R[cur].a1,R[cur].b1,R[cur].a2,R[cur].b2);
 57 }
 58 
 59 int main(){
 60     freopen("window.in","r",stdin);
 61     freopen("window.out","w",stdout);
 62     pmin = 499;
 63     pmax = 500;
 64     while(cin >> str){
 65         int len = str.length();
 66         if(str[0] == 'w'){
 67             R[tot].id = str[2]; //矩形的flag
 68             R[tot].pro = pmax++; //矩形的优先级
 69             id[(int)str[2]] = tot; //
 70             pro[R[tot].pro] = tot;
 71             int v[4] = {0},cur = 0;
 72             for(int i = 4; i < len - 1; ++i){
 73                 if(str[i] == ',') ++cur;
 74                 else v[cur] = v[cur] * 10 + str[i] - '0';
 75             }
 76             R[tot].a1 = min(v[0],v[2]),R[tot].b1 = min(v[1],v[3]);
 77             R[tot].a2 = max(v[0],v[2]),R[tot].b2 = max(v[1],v[3]);
 78             tot++;
 79         }
 80         else if(str[0] == 't'){
 81             int cur_id = id[(int)str[2]];
 82             pro[R[cur_id].pro] = -1;
 83             R[cur_id].pro = pmax++;
 84             pro[R[cur_id].pro] = cur_id;
 85         }
 86         else if(str[0] == 'b'){
 87             int cur_id = id[(int)str[2]];
 88             pro[R[cur_id].pro] = -1;
 89             R[cur_id].pro = pmin--;
 90             pro[R[cur_id].pro] = cur_id;
 91         }
 92         else if(str[0] == 'd'){
 93             int cur_id = id[(int)str[2]];
 94             pro[R[cur_id].pro] = -1;
 95         }
 96         else{
 97             int cur_id = id[(int)str[2]];
 98             int ans = Solve(cur_id);
 99             int total = (R[cur_id].a2 - R[cur_id].a1) * 
100                 (R[cur_id].b2 - R[cur_id].b1);
101             printf("%.3f\n",(double)ans * 100 / total);
102         }
103     }
104     return 0;
105 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4379203.html

基于PyTorch的BP神经网络PID控制器动态调参实战 本文详细介绍了基于PyTorch的BP神经网络PID控制器动态调参实战,结合BP神经网络的自适应能力和PID控制算法的经典优势,实现工业控制中的高效参数调整。通过PyTorch实现BP-PID融合架构,包括网络设计、损失函数优化及动态调参技巧,显著提升控制性能,适用于温度控制、电机控制等场景。 阅读详情

相关推荐

24届-Python面经(华为OD)

【摘要】24届非科班生通过栗栗姐指导成功转行华为OD。从4月4日零基础准备,经历机考(4/18)、测评(4/19)、资格面(5/7)、技术面(5/9-11)到5月17日获offer。全程栗栗姐提供题库、面经指导和实时跟进。虽遇压力面和技术短板,但在专业辅导下10天走完全流程。案例证明转行需自身努力+优质HR支持,栗栗姐团队提供多岗位(Java/Python等)、多地域(北上深等)OD机会,含笔试资料和全流程攻略。

2401_86909848的博客 1188

[USACO5.3]Window Area【窗体面积】

这一道题没有想象中的那么难(1)建立窗用一个a数组来,a[][1]表示左上角的x坐标,a[][2]表示左上角的y坐标,a[][3]和a[][4]也是一样的a[head][]表示第head层的窗户坐标,记得是层(2)把窗户置顶把表示最高层的head+1,然后把当前的窗户放上去,在把以前的窗户删掉(3)把窗户置底把表示队尾tail--,再向(2)那样就可以了(4)求百分比dfs搜索,我们只用搜索比自己...

zsyzClb的博客 821

Vim 入门到够用:Linux 文本编辑器的三种模式、常用操作与实战技巧

i 进入编辑模式Esc 退出编辑模式回到命令模式: 从命令模式进入底行模式编辑,不一定非得“打开就直接打字”。一旦你接受了“模式”这件事,后面很多操作都会顺起来。学 Vim,不要追求一次学全,先把“命令模式—编辑模式—底行模式”这条主线练熟。只要这条主线通了,后面的复制、删除、搜索、替换,都是顺手补上去的能力。

Web安全工具库 798

[USACO5.3]窗体面积Window Area

https://www.luogu.org/problemnew/show/P2745 上浮法...真是奇特的方法 考虑到我们要把矩形置顶,那么如果我们置顶到第k层,现在摆在我们面前的是第k层的矩形 将矩形分为四个继续上浮即可 转载于:https://www.cnblogs.com/LM-LBG/p/10992892.html...

weixin_34415923的博客 252

STM32嵌入式开发实战:如何用miniLZO压缩算法节省70%存储空间(附完整工程)

本文详细介绍了如何在STM32嵌入式开发中使用miniLZO无损压缩算法实现高达70%的存储空间节省。通过对比分析不同轻量级算法,重点讲解miniLZO的内存优化配置、分块压缩策略和完整工程实现,帮助开发者有效解决嵌入式系统中的存储瓶颈问题。

ss78901的博客 881

使用 Python 爬取 Wikipedia 数据:抓取百科条目及其内容

维基百科的 API 提供了一些方便的接口,通过这些接口,我们可以轻松获取到维基百科的条目、类别、图片和其他相关信息。维基百科的 API 主要是基于 HTTP 请求的,通过向特定的 URL 发送 GET 请求来获取信息。:获取指定条目的内容。在本博客中,我们介绍了如何使用 Python 爬取维基百科的条目数据。通过使用 Wikipedia API 和网页抓取技术,我们能够高效地获取条目内容,并将其存储和分析。希望本篇教程能帮助你深入理解如何抓取和处理维基百科的数据。

2201_76125261的博客 475

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

洛谷题目链接:[USACO5.3]窗体面积Window Area 题目描述 你刚刚接手一项窗体界面工程。窗体界面还算简单,而且幸运的是,你不必显示实际的窗体。有 5 种基本操作: 创建一个新窗体 将窗体置顶 将窗体置底 删除一个窗体 输出窗体可见部分的百分比(就是,不被其它窗体覆盖的部分)。 在输入文件中,操作以如下的格式出现。 创建一个新窗体:w(I,x,y,X,Y) 将窗体置顶: t...

dengtun2502的博客 654

【OpenClaw企业级智能体实战】第32篇:政企版OpenClaw安全落地指南——奇安信55页报告深度拆解与实战

2026年Q2,OpenClaw(俗称“龙虾”)安全风险集中爆发,公安部、工信部等监管机构密集发声,23万公网暴露实例、155个高危漏洞让企业“养虾”安全压力骤增。奇安信发布的55页《政企版龙虾安全使用指南》,以“看得清、管得住、用得好”为核心,构建了“端-网-云”三层防护体系。本文深度拆解这份报告的九大安全面与三大趋势,全景扫描奇安信、腾讯、360等头部厂商安全方案,提炼企业最低安全基线与实操配置,通过金融机构虚拟案例演示落地全流程,提供从资产摸底、规范制定到工具部署的完整解决方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 572

USACO5.3.2 Window Area (window)

矩形切割。 执行非查询操作时更新高度,创建窗体和置顶时时height[i]=top++,置底height[i]=bot--,删除窗体时vis[i]=false。 执行查询操作时dfs,每次用比窗口i高一层的窗体把i切割成最多4个矩形,然后递归。 这种方法叫上浮法,对于当前dfs的窗口i,想象它向上浮,遇上了第一个比它高的矩形,被它切成了最多4个矩形,然后4个小矩型再继续上浮,直到露出水面时剩

Shion的专栏 488

Unity 热更 之 【YooAsset 热更】几分钟快速了解 YooAsset [功能面板]、以及 [基础代码] 说明

Unity 的资源管理系统不断发展,以适应不同项目的需求和解决特定的问题。AssetBundle 和 Addressable Asset System 是 Unity 官方提供的资源管理解决方案,而 YooAsset 是第三方提供的资源管理系统。简化的API和易用性YooAsset 可能提供了更简单直观的 API,使得资源加载和管理更加容易。对于不熟悉 Addressable 或 AssetBundle 复杂配置的开发者来说,YooAsset 可能是一个更易于上手的选择。性能优化。

仙魁XAN 2955

Python 爬虫实战:爬取 B 站 UP 主投稿数据,分析更新频率与粉丝互动

摘要:本文基于Python技术实现B站UP主投稿数据的自动化爬取与分析。通过解析B站WBI签名机制和API接口,获取UP主视频的标题、播放量、点赞数等核心数据。采用时间序列分析统计更新频率,结合相关性分析挖掘内容特征与粉丝互动的关联。结果显示编程类视频播放量最高,10-20分钟时长的视频表现最佳,投币数与播放量相关性达0.92。文章详细介绍了接口分析、反爬应对等关键技术,为内容创作者优化策略提供数据支持,同时强调遵守平台规范的爬取原则。

2503_91057718的博客 1537

上浮法或漂浮法

题意:给一张白纸,按顺序往上面贴有颜色且不透明的矩形,求最后能看到的颜色以及每种颜色的面积。 思路:对每个矩形而言,它最后能有多少被看见,取决于它后面的矩形。所以从后往前处理,就像一个矩形从最底下上浮,碰到它上面的矩形就分成若干块,到水面上时更新答案。递归表示剩余的可见矩形,然后模拟上浮过程。 1 struct Node { 2 int x1, y1, x2, ...

weixin_30512089的博客 268

EtherCAT ROS2 入门教程(一)

本文介绍了EtherCAT驱动与ROS2的集成方案,主要包括三部分内容:1)在Ubuntu 22.04上安装IgH EtherCAT主站的详细步骤,包括内核配置、源码编译和网络适配器设置;2)构建ethercat_driver_ros2,通过ros2_control描述文件配置硬件接口和EtherCAT从站模块插件;3)使用方法,包括启动EtherCAT主站和运行配置包。该方案支持通过参数文件定义硬件接口,并提供通用和专用两种EtherCAT模块插件,便于开发基于EtherCAT的工业应用。

机器人控制与仿真应用 1529

usaco5.3.2 Window Area

一 原题 Window Area IV Balkan Olympiad You've just be assigned the project of implemented a windowing interface. This windowing interface is fairly simple, and fortunately, you don't have to display

max_kibble的博客 392

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Usaco Training Section 5.3 Window Area

有一堆窗户,以及一些创建、置顶、置地、删除的操作,中间要询问几次某个窗户可见的百分比是多少。 对于创建、置顶、置地、删除的操作,直接模拟即可。主要是询问。 求可见百分比,要求出可见范围,也就是求被覆盖的面积,这是经典的矩阵覆盖。可用扫描线来实现。 懒得写线段树(貌似也并不需要),直接排序+推一推。 #include&lt;bits/stdc++.h&gt; #define ll lo...

Monster的博客 257

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

https://www.luogu.org/problem/show?pid=2745 本来因为会WA的,结果AC了,啊哈哈哈哈哈哈哈哈哈 因为题目要求我们要把一个个平面有先后关系,那么我们就搞一个队列嘛,每次询问时,不断把平面上升就好了; 但是一个平面被另一个平面挡住一部分,剩下的可以简单得理解为4个部分: 上下左右 111122 111122 440022 ...

weixin_30408309的博客 189

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Big Barn 巨大的牛棚】【转】

农夫约翰想要在他的正方形农场上建造一座正方形大牛棚。他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方。我们假定,他的农场划分成 N x N 的方格。输入数据中包括有树的方格的列表。你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚。牛棚的边必须和水平轴或者垂直轴平行。 格式 EXAMPLE 考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方

geng4512的专栏 1697

usaco 5.3 Window Area(模拟+矩形切割)

Window Area IV Balkan Olympiad You've just be assigned the project of implemented a windowing interface. This windowing interface is fairly simple, and fortunately, you don't have to display the act

志当存高远 1054

[置顶] 矩形

题目背景: 幻想乡的创始人之一,八云紫,有着强大的控制结界的能力,可以瞬间消除一定范围内 所有弹幕。我们可以将其消除范围视为一个矩形,而弹幕可以视为动点。 八云紫想要嘲讽她的敌人,所以她希望只使用一次消除能力,尽可能多地消除弹幕。 请你告诉她,在哪一时刻使用道具,可以消除尽可能多的弹幕。 问题描述: 在平面上给定一个矩形区域(也可能退化成线段或者点)。 矩形...

weixin_30709635的博客 189

USACO5.3.2 Window Area(window)

对于创建,置顶,置底,删除一个窗体 ,很简单就不赘述了。重点在最后一问输出面积百分比,即矩形切割的题目。 所谓的矩形切割,矩形a与矩形b重叠,其中a在下面,b在上面,我们要知道a有多少面积可以被看见。其实就是用dfs的方法,在多个矩形重叠的情况下,一般先按重叠次序排一下序,然后从要询问的那个开始一次与他上面相邻的矩形比较,每次把不重叠的左边、右边、上边、下边一部分分别割成4个小矩形,然后每个小矩

xsy_victory的专栏 446

C++——【USACO 5.3.2】——Window Area

Window Area IV Balkan Olympiad You've just be assigned the project of implemented a windowing interface. This windowing interface is fairly simple, and fortunately, you don't have to display the a

McDonnell_Douglas的博客 561

[USACO5.3.2] 窗体面积 - 矩形切割

题目描述你刚刚接手一项窗体界面工程。窗体界面还算简单,而且幸运的是,你不必显示实际的窗体。有 5 种基本操作:   创建一个新窗体   将窗体置顶   将窗体置底   删除一个窗体 输出窗体可见部分的百分比(就是,不被其它窗体覆盖的部分)。 在输入文件中,操作以如下的格式出现。   创建一个新窗体:w(I,x,y,X,Y)   将窗体置顶: t(I)   将窗体置底: b

Bill_Yang_2016的博客 1027

[USACO 3.1.4]rect1(漂浮法/矩形切割)

描述 N个不同的颜色的不透明的长方形(1 <= N <= 1000)被放置在一张横宽为A竖长为B的白纸上。 这些长方形被放置时,保证了它们的边与白纸的边缘平行。 所有的长方形都放置在白纸内,所以我们会看到不同形状的各种颜色。 坐标系统的原点(0,0)设在这张白纸的左下角,而坐标轴则平行于边缘。[编辑]格式 PROGRAM NAME: rect1INPUT FORMAT:(file ...

weixin_30492047的博客 257

USACO Section 5.3 Window Area

题意: Windows窗体

House 899

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 241

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 391
上一篇: USACO 5.3 Milk Measuring(ID-DFS,DP)
下一篇: USACO 5.3 Network of Schools (强连通分量,缩点)
dingdi3021
博客等级 码龄11年 1粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值