题目描述

给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\infty)$时间内一个点被覆盖的最多矩形数量。n<=10^5。

分析

部分分给的可真多,$n^2$就能拿80pts(然而我n==2的特判打错了(不知道为什么我puts("0")了qwq)变成70pts)

首先:我们可以把竖着运动的矩形看成静止不动,把横着运动的矩形看成延斜率k=-1的直线运动的矩形

  因为一开始没有重复矩形,所以最后最多只有两个重复,所以答案不是1,就是2

  所以我们输出rand()%2+1

  考试的时候把这道题当做计算几何做了...

考虑$n^2$做法:

  由上面的分析可以得到,如果答案为2,只有这三种情况:

  分别枚举每一个0的矩形和1的矩形判断有没有重叠就好了

  注意check的时候能不能取等号

考虑优化:

  显然我们可以把这题转换成区间覆盖,每个矩形变成这样的线段:

$$(x_2-x_1-w_1,x_2+w_2-x_1)$$

和

$$(y_1-y_2-h_2,y_1+h_1-y_2)$$

然后化简一下,用贪心做区间覆盖就好了(比我打的$n^2$还简单。。。)

 #include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-')f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int M = 1e5+;
int n,T,n1,n2;
//-----------------------------------n^2暴力做法------------------------------------
struct P{int x,y,w,h;}a[M],b[M];
struct Poi{int x,y;};
struct Line{int a[];}ll[M];
int L[M];
int s[][];
inline bool check_up(Poi x,int l){
int y=-x.x+l;
if(x.y>y) return ;
return ;
}
inline bool check_down(Poi x,int l){
int y=-x.x+l;
if(x.y<y) return ;
return ;
}
inline bool check(Poi x,Poi y,int l1,int l2){
int y1=-x.x+l1,y2=-y.x+l2;
if(x.y>=y1&&y.y<=y2) return ;
return ;
}
inline void Solve_1(){
n=read();n1=,n2=;
for(int i=;i<=n;i++){
int x=read(),y=read(),w=read(),h=read(),d=read();
if(d==)
a[++n1]=(P){x,y,w,h};
else b[++n2]=(P){x,y,w,h};
}
for(int i=;i<=n1;i++){
ll[i].a[]=a[i].x+a[i].y;
ll[i].a[]=a[i].x+a[i].y+a[i].w+a[i].h;
}int ff=;
for(int i=;i<=n2;i++){
Poi A,B;
A=(Poi){b[i].x,b[i].y};
B=(Poi){b[i].x+b[i].w,b[i].y+b[i].h};
for(int j=;j<=n1;j++){
if(check_down(A,ll[j].a[])&&check_up(B,ll[j].a[])||
check_down(A,ll[j].a[])&&check_up(B,ll[j].a[])||
check(A,B,ll[j].a[],ll[j].a[]))
{ff=;break;}
}
}if(!ff) puts("");else puts("");
}
//--------------------------------------------------------------------------------------------
int lst[M],ff;
struct PP{int x,y,type;}seg[M];
bool cmp(const PP&a,const PP&b){return a.x==b.x&&a.y<b.y||a.x<b.x;}
inline void Solve(){
n=read(),ff=;
for(int i=;i<=n;i++){
int x=read(),y=read(),w=read(),h=read(),d=read();
seg[i]=(PP){x+y,x+y+w+h,d};
}sort(seg+,seg+n+,cmp);
memset(lst,-0x3f,sizeof(lst));
for(int i=;i<=n;i++){
if(seg[i].x<lst[seg[i].type^]){
puts("");
ff=;break;
}lst[seg[i].type]=max(lst[seg[i].type],seg[i].y);
}if(!ff)puts("");
}
int main(){
freopen("cloud.in","r",stdin);
freopen("cloud.out","w",stdout);
T=read();
while(T--){
// Solve_1();
Solve();
}
return ;
}

[NOIP2019模拟赛]LuoguP4261白金元首与克劳德斯的更多相关文章

  1. code+3月赛 loj6299 白金元首与克劳德斯

    千里白金雪满天 烽火江山起狼烟 分手竟兵刃相见 1941.7. 苏联军队出乎意料的反抗力量.前线德军的补给困难 —— 元首 Adolf 望着天空的云层陷入沉思…… 在 xyxyxy-直角坐标平面的天空 ...

  2. 【LibreOJ】#6299. 「CodePlus 2018 3 月赛」白金元首与克劳德斯

    [题意]给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\i ...

  3. 「CodePlus 2018 3 月赛」白金元首与克劳德斯

    所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重 ...

  4. test20190827 NOIP2019 模拟赛

    100+100+50=250.最后那道期望题需要用另外的方式统计. 精灵加护 ljss 被 M 个敌人打倒在地上啦!每个敌人有一个威力值 bi.但是他手中还拥有 N 把武器!每把武器有一个威力值 ai ...

  5. test20190826 NOIP2019 模拟赛

    100+100+40=240.我觉得如果没做过第三题考场上却能想出来的都是神仙. 基因突变 [问题描述] 邪恶的 707 刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类! 但是统治人类是很庞大 ...

  6. test20190818 NOIP2019 模拟赛

    0+0+20=20,不给大样例,小数据又水,还没有题解的垃圾题. A 题 问题描述: long long ago, Lxhgww 统治的国家里有 n 个城市,其中某一个城市是 capital (首都) ...

  7. test20190816 NOIP2019 模拟赛

    100+100+20=220,T3吐槽:整个考室没有一个人正确地理解了题意. 树上路径(phantasm) Akari 的学校的校门前生长着一排 n 棵树,从西向东依次编号为 1 ∼ n.相邻两棵树间 ...

  8. 题解 noip2019模拟赛Day1T3

    题面 运河计划 问题描述 水运在人类的交通运输史中一直扮演着重要的角色.借助河流.的便利,人们得以把大量的货物输送到天南海北不仅仅是自然界现成的河流,人工开凿的运河(如苏伊士运河.巴拿马运河.我国的京 ...

  9. [NOIP2019模拟赛][AT2381] Nuske vs Phantom Thnook

    题目链接 评测姬好快啊(港记号?)暴力40pts变成60pts 因为题目说了保证蓝色点两两之间只有一条路径,所以肯定组成了一棵树,而对于每次询问的x1,y1,x2,y2的子矩阵中就存在着一个森林 不难 ...

随机推荐

  1. NX二次开发-C++time函数计时

    NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> #include <t ...

  2. Nginx:413 Request Entity Too Large 的解决方法

    报错信息413 Request Entity Too Large 解决方法: (20M大小,自己调节,根据文件大小.)修改 php 的配置文件 /etc/php5/fpm/php.ini upload ...

  3. windows下安装sass,以及常见错误和解决办法

    简介: sass依赖于ruby环境,安装sass之前得先装ruby. 1.安装ruby 1.1.下载地址:http://rubyinstaller.org/downloads 1.2.注意事项:安装时 ...

  4. 分享一套高级Java笔试题(实拍高清图)

    分享一套高级Java笔试题 微信群里群友分享的 刚好他在笔试 有些问题不会发到群里求助 如果你最近正好在面试 需要参考需要提升 这套试题或许对你有用 下面是部分分享原图 下面是微信群中群友的热议 非常 ...

  5. 随笔-ansible-4

    触发器: 一个任务同时调用多个触发器: 为远程主机上的用户设置环境变量: 保存前一步命令的输出结果,并保存到foo中: 添加环境变量的另一种方式: 注意:lineinfile模块只适用于修改少量环境变 ...

  6. [转]从客户端中检测到有潜在危险的 Request.Form 值。

    参考资料: ASP.NET 4.0中使用FreeTextBox和FCKeditor遇到安全问题警告的解决办法关于问题出现的原因说的很清楚 引言 本人在.NET 4.0+VS2010环境下调试一个ASP ...

  7. Python全栈开发:django网络框架(二)

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  8. jquery无缝向上滚动实现代

    <!DOCTYPE html><html><head><style type="text/css">.renav{width:200 ...

  9. IPsec分析/测试/

    一   局域网拓扑图 局域网环境搭建步骤: (升级最新版本 ,恢复出厂设置后) 1 两台网关wan口直连,分别接两台pc , 2 局域网网络测试,正常情况下PC1 和PC2 互通 ,测试通过在进行ip ...

  10. 在Spring-boot中,为@Value注解添加从数据库读取properties支持

    一般我们会把常用的属性放在工程的classpath文件夹中,以property,yaml或json的格式进行文件存储,便于Spring-boot在初始化时获取. @Value则是Spring一个非常有 ...