[NOIP2019模拟赛]LuoguP4261白金元首与克劳德斯
题目描述
给出坐标系中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白金元首与克劳德斯的更多相关文章
- code+3月赛 loj6299 白金元首与克劳德斯
千里白金雪满天 烽火江山起狼烟 分手竟兵刃相见 1941.7. 苏联军队出乎意料的反抗力量.前线德军的补给困难 —— 元首 Adolf 望着天空的云层陷入沉思…… 在 xyxyxy-直角坐标平面的天空 ...
- 【LibreOJ】#6299. 「CodePlus 2018 3 月赛」白金元首与克劳德斯
[题意]给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\i ...
- 「CodePlus 2018 3 月赛」白金元首与克劳德斯
所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重 ...
- test20190827 NOIP2019 模拟赛
100+100+50=250.最后那道期望题需要用另外的方式统计. 精灵加护 ljss 被 M 个敌人打倒在地上啦!每个敌人有一个威力值 bi.但是他手中还拥有 N 把武器!每把武器有一个威力值 ai ...
- test20190826 NOIP2019 模拟赛
100+100+40=240.我觉得如果没做过第三题考场上却能想出来的都是神仙. 基因突变 [问题描述] 邪恶的 707 刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类! 但是统治人类是很庞大 ...
- test20190818 NOIP2019 模拟赛
0+0+20=20,不给大样例,小数据又水,还没有题解的垃圾题. A 题 问题描述: long long ago, Lxhgww 统治的国家里有 n 个城市,其中某一个城市是 capital (首都) ...
- test20190816 NOIP2019 模拟赛
100+100+20=220,T3吐槽:整个考室没有一个人正确地理解了题意. 树上路径(phantasm) Akari 的学校的校门前生长着一排 n 棵树,从西向东依次编号为 1 ∼ n.相邻两棵树间 ...
- 题解 noip2019模拟赛Day1T3
题面 运河计划 问题描述 水运在人类的交通运输史中一直扮演着重要的角色.借助河流.的便利,人们得以把大量的货物输送到天南海北不仅仅是自然界现成的河流,人工开凿的运河(如苏伊士运河.巴拿马运河.我国的京 ...
- [NOIP2019模拟赛][AT2381] Nuske vs Phantom Thnook
题目链接 评测姬好快啊(港记号?)暴力40pts变成60pts 因为题目说了保证蓝色点两两之间只有一条路径,所以肯定组成了一棵树,而对于每次询问的x1,y1,x2,y2的子矩阵中就存在着一个森林 不难 ...
随机推荐
- NX二次开发-UFUN工程图表格注释写入文本内容UF_TABNOT_set_cell_text
NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...
- csp-s模拟测试93
csp-s模拟测试93 自闭场. $T1$想到$CDQ$,因为复杂度少看见一个$0$打了半年还用了$sort$直接废掉,$T2$,$T3$直接自闭暴力分都没有.考场太慌了,心态不好. 02:07:34 ...
- Java-Class-C:org.springframework.http.converter.StringHttpMessageConverter
ylbtech-Java-Class-C:org.springframework.http.converter.StringHttpMessageConverter 1.返回顶部 1.1. impor ...
- IPv6 三个访问本地地址的小Tips
最近发现家里宽带支持IPv6了,这里分享三个利用IPv6访问本地地址(内网地址)的方法. 通常来说,我们用localhost来代表本地地址127.0.0.1.其实在IPv6中有他自己的表示方法ip6- ...
- 剑指offer——29顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- Spring 源码学习——加载 Bean
继上次注册 bean 之后好久没更新,这两天有空查了查资料也自己看了看 spring BeanFactory 的 getBean(beanName); 这个方法.因时间有限不能像之前那样复制代码并一行 ...
- NodeJS学习笔记之Connect中间件应用实例
一,开篇分析 大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章, 我也介绍过“Connect”中间件的使用以及“Mongodb”的用 ...
- jmeter在windows环境下系统参数设置
在windows环境下搭建jmeter的压测实验环境,需要对操作系统默认的一些个参数进行设置,以提高并发能力.特别是作为压力机的时候. Socket 编程时,单机最多可以建立多少个 TCP 连接,受到 ...
- Linux系统搭建Red5服务器
Linux系统搭建Red5服务器 Red5 是 支持Windows,Linux等多平台的RTMP流媒体服务器,Windows下搭建相对容易,图形界面操作比较简单,Linux服务器的环境下没有图形界面, ...
- php 执行mysql inset 指令无效
网数据库里插入一条 inset into je_user("name","va") values("df","12"), ...