[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的子矩阵中就存在着一个森林 不难 ...
随机推荐
- kafka保证数据不丢失机制
kafka如何保证数据的不丢失 1.生产者如何保证数据的不丢失:消息的确认机制,使用ack机制我们可以配置我们的消息不丢失机制为-1,保证我们的partition的leader与follower都保存 ...
- QString与string的相互转换【转载】
文章转载自https://blog.csdn.net/qq_33485434/article/details/80680506 1.QString转换String string s = qstr.to ...
- csp-s模拟测试99
csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...
- ADIS16405BMLZ
GND,VCC,CS,DOUT,SCLK,DIN
- 将excel表格或csv转换为Shapefile文件
读取csv转为shp 构造读取csv函数 def read_csv(fp): ret = [] with open(fp, 'rb') as f: for line in f: ret.append( ...
- JS对象 向下取整floor() floor() 方法可对一个数进行向下取整。 语法: Math.floor(x)
向下取整floor() floor() 方法可对一个数进行向下取整. 语法: Math.floor(x) 参数说明: 注意:返回的是小于或等于x,并且与 x 最接近的整数. 我们将在不同的数字上使用 ...
- 关于VSCode的一些常用插件和一些常用设置
常用插件: .Beautify :格式化 html ,js,css .Bracket Pair Colorizer :给括号加上不同的颜色,便于区分不同的区块,使用者可以定义不同括号类型和不同颜色 . ...
- 解决Keep-Alive 和 Close 不能使用此属性设置
http://www.hejingzong.cn/blog/viewblog_86.aspx Keep-Alive 和 Close 不能使用此属性设置 public static void SetHe ...
- PHP算法之按奇偶排序数组
给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素. 你可以返回满足此条件的任何数组作为答案. 示例: 输入:[3,1,2,4]输出:[2,4,3,1]输出 ...
- phonegap 开发指南系列----简介(2)
一.简介 Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等. Cordova还提供了一组统一的Ja ...