千里白金雪满天 烽火江山起狼烟 分手竟兵刃相见

1941.7.

苏联军队出乎意料的反抗力量、前线德军的补给困难 —— 元首 Adolf 望着天空的云层陷入沉思……

在 xyxyxy-直角坐标平面的天空中,有 nnn 片四边平行于坐标轴的矩形云朵。每一片云由一个五元组 (xi,yi,wi,hi,di)(x_i, y_i, w_i, h_i, d_i)(x​i​​,y​i​​,w​i​​,h​i​​,d​i​​) 表示,其中 (xi,yi)(x_i, y_i)(x​i​​,y​i​​) 为云左下角顶点的坐标,wiw_iw​i​​ 表示云在 xxx 轴方向的宽度,hih_ih​i​​ 表示云在 yyy 轴方向的长度,di∈{0,1}d_i \in \{0, 1\}d​i​​∈{0,1} 为云的移动方向(000 为横向,111 为纵向)。具体来说,满足 di=0d_i = 0d​i​​=0 的云沿 xxx 轴正方向以每秒 111 长度单位的速率不断移动,而满足 di=1d_i = 1d​i​​=1 的云沿 yyy 轴正方向以每秒 111 长度单位的速率不断移动。

元首发现,所有的云在此时没有重叠的面积。他将这个时刻记作时刻 000。他想知道,对于 (−∞,+∞)(-\infty, +\infty)(−∞,+∞) 中的任意时刻和平面上的任意一个点,最多可以同时被多少片云覆盖。一个点在某时刻被一朵云覆盖当且仅当这个点位于该时刻云朵所处矩形的内部(不含边界)。

你需要编写程序帮助元首满足他的好奇心。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 TTT —— 数据的组数。接下来包含 TTT 组数据,格式如下,数据间没有空行。

  • 第 111 行:一个正整数 nnn —— 云朵的数量。
  • 接下来 nnn 行:每行五个空格分隔的整数 xix_ix​i​​、yiy_iy​i​​、wiw_iw​i​​、hih_ih​i​​ 和 did_id​i​​ —— 描述一朵云在时刻 000 的状态。

输出格式

输出到标准输出。

对于每组数据输出一行 —— 在任意时刻,覆盖平面上任意一个点的云朵数目的最大值。

样例

样例输入

3
1
0 0 1 1 0
3
0 -10 10 10 1
10 0 10 10 1
-10 0 10 10 0
3
0 10 10 10 1
10 20 10 10 1
10 0 10 10 0

样例输出

1
2
2

第 111 组数据中,任意时刻的任意一个点至多被惟一的一片云覆盖。

第 222 组数据中,下图从左至右分别示意时刻 000、时刻 444、时刻 111111 的情形。

第 333 组数据中,时刻 000 对应第 222 组数据时刻 202020 的情形。在该组数据中,(−20,0)(-20, 0)(−20,0) 内的时刻均有 222 片云覆盖同一个点。请注意考察范围 (−∞,+∞)(-\infty, +\infty)(−∞,+∞) 包含时刻 000 之前的时间段。

数据范围与提示

子任务

对于所有数据,有 1≤T≤151 \leq T \leq 151≤T≤15,−5×108≤xi,yi≤−5×108-5 \times 10^8 \leq x_i, y_i \leq -5 \times 10^8−5×10​8​​≤x​i​​,y​i​​≤−5×10​8​​,1≤wi,hi≤−5×1081 \leq w_i, h_i \leq -5 \times 10^81≤w​i​​,h​i​​≤−5×10​8​​,di∈{0,1}d_i \in \{0, 1\}d​i​​∈{0,1}。

测试点编号 nnn 特殊约定
1 ≤1\leq 1≤1
2 ≤2\leq 2≤2
3 ≤10\leq 10≤10 −50≤xi,yi≤50-50 \leq x_i, y_i \leq 50−50≤x​i​​,y​i​​≤50,1≤wi,hi≤501 \leq w_i, h_i \leq 501≤w​i​​,h​i​​≤50
4 ≤50\leq 50≤50
5 ≤100\leq 100≤100 wi=hi=1w_i = h_i = 1w​i​​=h​i​​=1
6 ≤1000\leq 1000≤1000 −103≤xi,yi≤103-10^{3} \leq x_i, y_i \leq 10^{3}−10​3​​≤x​i​​,y​i​​≤10​3​​,1≤wi,hi≤1031 \leq w_i, h_i \leq 10^{3}1≤w​i​​,h​i​​≤10​3​​
7
8 wi=hi=1w_i = h_i = 1w​i​​=h​i​​=1
9 ≤100000\leq 100000≤100000
10

Dann soll die Armee eben kehrt machen!

题面与史实无关。

提示

最大输入约为 50 MiB,请注意程序在读入上的耗时哦。


来自 CodePlus 2017 3 月赛,清华大学计算机科学与技术系学生算法与竞赛协会 荣誉出品。
Credit:idea/吕时清 命题/吕时清 验题/丁子钧
Git Repo:https://git.thusaac.org/publish/CodePlus3
感谢腾讯公司对此次比赛的支持。

 
 
 
 
题意:N个矩形的云,分两种,一种沿x轴正方向移动,一种沿y轴正方向移动,速度都为1 
t=0时刻没有矩形相交,问在某个时间点最多有多少朵云重合(考虑 t 为负的情况)
 
 
 
分析:
思考可得,最多有两朵云相交,那么答案就只能是1或2
 
问题转化为判断会不会有两朵云在某个时刻相交
 
 
 
给出如下推导
 
 
问题最终转化为判断最后一行的式子是否对于每对移动方向不同的矩形都成立
其实就是N个区间是否有相交的两个区间。
可以二分,可以BIT,我用了set
 /*
Welcome Hacking
Wish You High Rating
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<set>
using namespace std;
int read(){
int xx=,ff=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')ff=-;ch=getchar();}
while(ch>=''&&ch<=''){xx=xx*+ch-'';ch=getchar();}
return xx*ff;
}
int T,N;
struct cloud_{
int x,y,w,h,d;
bool friend operator<(const cloud_&A,const cloud_&B)
{return A.x+A.y<B.x+B.y;}
}C[];
set<cloud_>s;
int calc(){
s.clear();
for(int i=;i<=N;i++)
if(!C[i].d)
s.insert(C[i]);
for(int i=;i<=N;i++)
if(C[i].d){
set<cloud_>::iterator j=s.lower_bound(C[i]);
if(j!=s.end())
if(C[i].x+C[i].y+C[i].w+C[i].h>j->x+j->y)
return ;
}
//两种相交的情况都要判断
s.clear();
for(int i=;i<=N;i++)
if(C[i].d)
s.insert(C[i]);
for(int i=;i<=N;i++)
if(!C[i].d){
set<cloud_>::iterator j=s.lower_bound(C[i]);
if(j!=s.end())
if(C[i].x+C[i].y+C[i].w+C[i].h>j->x+j->y)
return ;
}
return ;
}
int main(){
//freopen("in","r",stdin);
//freopen("out","w",stdout);
for(int T=read();T;T--){
N=read();
for(int i=;i<=N;i++)
C[i].x=read(),C[i].y=read(),C[i].w=read(),C[i].h=read(),C[i].d=read();
sort(C+,C++N);
printf("%d\n",calc());
}
return ;
}
 
 
 
 
 

code+3月赛 loj6299 白金元首与克劳德斯的更多相关文章

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

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

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

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

  3. [NOIP2019模拟赛]LuoguP4261白金元首与克劳德斯

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

  4. [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞

    [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...

  5. 「CodePlus 2017 12 月赛」白金元首与独舞

    description 题面 data range \[ 1 \leq T \leq 10, 1 \leq n, m \leq 200 , 0 \leq k \leq \min(nm, 300)\] ...

  6. 【LibreOJ】#6259. 「CodePlus 2017 12 月赛」白金元首与独舞

    [题目]给定n行m列的矩阵,每个位置有一个指示方向(上下左右)或没有指示方向(任意选择),要求给未定格(没有指示方向的位置)确定方向,使得从任意一个开始走都可以都出矩阵,求方案数.n,m<=20 ...

  7. 「CodePlus 2018 3 月赛」白金元首与莫斯科

    $n \leq 17,m \leq 17$,$n*m$的01矩形,对每一个0问:当他单独变成1之后,在其他0处放多米诺牌(不一定放满,可以不放)的方案数.膜$1e9+7$. 直接$dp$是$n^42^ ...

  8. 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞

    n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...

  9. loj6259「CodePlus 2017 12 月赛」白金元首与独舞

    分析 我们将没连的点连向周围四个点 其余的按照给定的方向连 我们将所有连出去的位置统一连到0点上 再以0作为树根 于是就将问题转化为了有向图内向树计数 代码 #include<iostream& ...

随机推荐

  1. time模块,补上之前拉下的作业。

    time,时间模块比较重要,但不难学,主要是要学会转换时间格式.计算机的时间都是时间戳.人是看不懂的.写出时间转换的固定格式语句.import time   # 首先就是引入时间模块. time.ti ...

  2. 更改Visual Studio Code为中文字体最有效的方法

    更改Visual Studio Code为中文字体最有效的方法. 网址:  https://marketplace.visualstudio.com/search?target=VSCode& ...

  3. 洛谷——P2054 [AHOI2005]洗牌(扩展欧几里得,逆元)

    P2054 [AHOI2005]洗牌 扩展欧拉定理求逆元 $1 2 3 4 5 6$$4 1 5 2 6 3$$2 4 6 1 3 5$$1 2 3 4 5 6$ 手推一下样例,你就会发现是有规律的: ...

  4. linux网络编程——域名转换 gethostbyname与gethostbyaddr

    域名转换 #include <netdb.h> struct hostent *gethostbyname(const char *name); 参数: name: 执行主机名的指针 返回 ...

  5. Linux学习笔记记录(二)

  6. VM 安装ubuntu16.04简易方法

    在已经安装好VM10虚拟机后 首先文件—>新建虚拟机—>典型(标准)  选择稍后安装操作系统,后续要使用的是已经下载好的ubuntu16.04镜像  选择操作系统是linux ,版本是ub ...

  7. vue-router2.0二级路由的简单使用

    1.app.vue中 <template> <div id="app"> <router-view></router-view> & ...

  8. MySQL Connector/Python 接口 (一)

    这里仅介绍 MySQL 官方开发的 Python 接口,参见这里: https://dev.mysql.com/doc/connector-python/en/ Chapter 1 Introduct ...

  9. 微信小程序-template模板

    ============================= 构建template模板                    ============================= 1.分析得出共为 ...

  10. jquery 选中设置的值

    select设置值为xxx选中:如下所示 $("#questionClass").val("xxx");