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

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. CodeFrist基础_迁移更新数据

    一丶自动迁移 第一次启用迁移:NeGet-->Enable-Migrations public DemoDbContext() : base("name=ConncodeFirst&q ...

  2. java几种连接数据库的方法

    package bean; import java.sql.Connection;import java.sql.DriverManager; public class jdbcTest { //不同 ...

  3. 第二章 设计高质量的React组件

    第二章 设计高质量的React组件 高质量React组件的原则和方法: 划分组件边界的原则: React组件的数据种类: React组件的生命周期. 2.1 易于维护组件的设计要素 1.高内聚:指的是 ...

  4. JavaScript--小白入门篇1

    一.JavaScript简介 1.1 JavaScript的用途   JavaScript用来制作web页面交互效果,提升用户体验.    简单列出几个JavaScript能够制作的页面效果,它能干什 ...

  5. WIndows 系统下的常用命令 和 检测方法

    ### 一.检测硬盘速度(Windows 自带工具) #### 使用windows 系统自带的工具测试硬盘读写速度 > 在使用下面命令前,需要获得管理员权限,才会在Dos窗口上显示(否则,一闪而 ...

  6. Authors and instutes in MCT

    Authors and instutes in MCT Table of Contents 1. Authors and Institutes 1.1. Industry 1 Authors and ...

  7. dstat系统分析工具的使用

    1.安装 方法一:yum #yum install -y dstat 方法二:rpm 官网下载地址: http://dag.wieers.com/rpm/packages/dstat #wget ht ...

  8. vim配置说明20170819

    一.修改-/.vim/colors/guodesert.vim " Vim color file " Maintainer: Hans Fugal <hans@fugal.n ...

  9. E - 不容易系列之(4)――考新郎 错排数公式

    国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:  首先,给每位新娘打扮得几乎一模一 ...

  10. $inject的用法

    controller后面的$inject是用来注入函数的变量名称的