bzoj 3718: [PA2014]Parking
Description
你的老板命令你将停车场里的车移动成他想要的样子。
停车场是一个长条矩形,宽度为w。我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系。停车场很长,我们可以认为它一直向右边伸展到无穷远处。
车都是边平行于坐标轴的矩形,大小可能不同。你可以将车任意地平移(但不能旋转),只要他们不超出停车场的边界,且不能互相碰撞,但紧挨着是允许的(即任意时刻任两辆车的重叠面积为0)。
你知道目前各辆车的摆放位置,以及老板心中所想的位置。你需要判断是否可以办到老板的任务。

Input
第一行为一个整数t(1<=t<=20),表示测试数据数量。
对于每组测试数据,第一行两个整数n,w(1<=n<=50000,1<=w<=10^9),分别表示车的数量和停车场的宽度。
接下来n行,第i行有四个整数x1,y1,x2,y2(0<=x1,x2<=10^9,0<=y1,y2<=w),表示编号为i的车的当前位置是由x1,y1,x2,y2确定的矩形。(注意:数据有可能出现x1>x2或y1>y2)
再接下来n行,格式和意义同上,表示车的目标位置。
Output
输出t行,第i行为TAK(是)或NIE(否),表示第i组测试数据中能否按照要求进行移动。
Sample Input
3 3
0 0 2 2
2 1 4 3
4 0 6 1
0 0 2 2
2 1 4 3
0 2 2 3
3 3
0 0 2 2
2 1 4 3
4 0 6 1
2 1 4 3
0 0 2 2
4 0 6 1
Sample Output
NIE
HINT
Source
r_64考试的原题,只不过r_64把它弱化了一下;
首先给出一个结论,手完2就会发现,但是r_64略证了一下:
对。准确地来说这是道结论题。如果两个滑块宽度(y 2 − y 1 )之和大于w,且横坐标相对
位置前后不一致,那么就无解。
仔细想想其实挺有道理。首先,如果这样的两个滑块存在,那么在移动过程中它们的相
对顺序(谁在左谁在右)肯定会发生改变。这样,必定有一个时刻,一条直线x = x 0 同时穿过
这两个滑块。但是这与它们宽度之和大于w矛盾。
于是我们只要找到x1[i]>x1[j],x3[i]<x3[j[,len[i]>w-len[j],就是不合法,这个看起来是个三维偏序啊,但是我们只有找到一个就行了;
所以第三维len[i]只要记max就行了,所以就是二维偏序了,一维排序后树状数组即可;
//MADE BY QT666
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=100050;
struct data{
int x1,x2,x3,x4,y1,y2,y3,y4,len;
}g[N];
int n,w,tr[N],tot,hsh[N];
bool cmp(const data &a,const data &b){
if(a.x1==b.x1) return a.x3>b.x3;
return a.x1>b.x1;
}
int lowbit(int x){return x&-x;}
void update(int x,int v){
for(int i=x;i<=tot;i+=lowbit(i)) tr[i]=max(tr[i],v);
}
int query(int x){
int ret=0;
if(x==0) return 0;
for(int i=x;i;i-=lowbit(i)) ret=max(ret,tr[i]);
return ret;
}
int main(){
int T;scanf("%d",&T);int tmp=0;
while(T--){
scanf("%d%d",&n,&w);int flg=0;tot=0;tmp++;
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&g[i].x1,&g[i].y1,&g[i].x2,&g[i].y2);
if(g[i].x1>g[i].x2) swap(g[i].x1,g[i].x2);
if(g[i].y1>g[i].y2) swap(g[i].y1,g[i].y2);
hsh[++tot]=g[i].x1;
g[i].len=g[i].y2-g[i].y1;
}
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&g[i].x3,&g[i].y3,&g[i].x4,&g[i].y4);
if(g[i].x3>g[i].x4) swap(g[i].x3,g[i].x4);
if(g[i].y3>g[i].y4) swap(g[i].y3,g[i].y4);
hsh[++tot]=g[i].x3;
}
if(!flg){
sort(hsh+1,hsh+1+tot);tot=unique(hsh+1,hsh+1+tot)-hsh-1;
sort(g+1,g+1+n,cmp);memset(tr,0,sizeof(tr));
for(int i=1;i<=n;i++){
int x=lower_bound(hsh+1,hsh+1+tot,g[i].x3)-hsh;
if(query(x-1)>w-g[i].len){
flg=1;puts("NIE");break;
}
update(x,g[i].len);
}
if(!flg) puts("TAK");
}
}
return 0;
}
bzoj 3718: [PA2014]Parking的更多相关文章
- [PA2014]Parking
[PA2014]Parking 题目大意: 停车场是一个宽度为\(w(w\le10^9)\)的矩形.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直向右边 ...
- BZOJ 3721: PA2014 Final Bazarek
3721: PA2014 Final Bazarek Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 645 Solved: 261[Submit][ ...
- BZOJ 3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1050 Solved: ...
- 【贪心】bzoj 3709:[PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 653 Solved: ...
- BZOJ 3713: [PA2014]Iloczyn( 枚举 )
斐波那契数列<10^9的数很少很少...所以直接暴力枚举就行了... ------------------------------------------------------------- ...
- bzoj3718 [PA2014]Parking
Description 你的老板命令你将停车场里的车移动成他想要的样子.停车场是一个长条矩形,宽度为w.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直向 ...
- bzoj 3714 [PA2014]Kuglarz 最小生成树
[PA2014]Kuglarz Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1335 Solved: 672[Submit][Status][Di ...
- bzoj 3722: PA2014 Final Budowa
3722: PA2014 Final Budowa Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 303 Solved: 108[Submit][St ...
- BZOJ 3712: [PA2014]Fiolki 倍增+想法
3712: [PA2014]Fiolki Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 437 Solved: 115[Submit][Status ...
随机推荐
- 学习MySQL(下)
具体实例 22.MySQL ALTER命令 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 1.如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使 ...
- 神奇的 routing mesh - 每天5分钟玩转 Docker 容器技术(100)
接上一节案例,当我们访问任何节点的 8080 端口时,swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本. 这就是 routing mesh 的作用. ...
- A:分段函数-poj
A:分段函数 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,计算下列分段函数y=f(x)的值. y=-x+2.5; 0 <= x < 5 y=2-1.5(x- ...
- buttongroup中content一次性加载的解决方法
buttongroup一次性加载所有内容的解决方法 如下图所示: 第一步: 设置windowcontainer的autoLoad属性为false(默认情况下autoLoad属性为true,所以会加载所 ...
- web更改AD用户密码
web更改AD用户密码 #web更改AD密码 #网站配置 绑定域名ad.test.cn 功能,更改AD用户密码 #参考http://bbs.51cto.com/thread-1379675-1.htm ...
- SubTool 电影字幕下载程序
项目地址 https://github.com/backtracker/SubTool 程序说明 作为一个高清电影爱好者,找字幕的痛苦懂的人自然会懂.我在网上找了很久,并没有找到好用的字幕下载程序,于 ...
- NYOJ 2357: 插塔憋憋乐 贪心
2357: 插塔憋憋乐 时间限制: 1 Sec 内存限制: 128 MB 提交: 82 解决: 18 [提交][状态][讨论版] 题目描述 众所不知,LLM是一位红警3大佬,打的非常厉害,但是曾经 ...
- PAT 1008. Elevator (20)
1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The highest ...
- C#自定义ip控件
前言:由于项目中有ip输入,但C#中又没有IP控件,如果直接放4个TextBox感觉又怎么好,还不好控制,于是可以通过自定义控件的方式来解决,就又了下面的自定义ip控件,该控件功能基本完善,如果还有未 ...
- Vuex 源码学习(一)
(一)Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态, 并以相应的规则保证状态以一种可预测的方式发生变化. —— 来自 V ...