818C.soft thief
Yet another round on DecoForces is coming! Grandpa Maks wanted to participate in it but someone has stolen his precious sofa! And how can one perform well with such a major loss?
Fortunately, the thief had left a note for Grandpa Maks. This note got Maks to the sofa storehouse. Still he had no idea which sofa belongs to him as they all looked the same!
The storehouse is represented as matrix n × m. Every sofa takes two neighbouring by some side cells. No cell is covered by more than one sofa. There can be empty cells.
Sofa A is standing to the left of sofa B if there exist two such cells a and b that xa < xb, a is covered by A and b is covered by B. Sofa A is standing to the top of sofa B if there exist two such cells a and b that ya < yb, a is covered by A and b is covered by B. Right and bottom conditions are declared the same way.
Note that in all conditions A ≠ B. Also some sofa A can be both to the top of another sofa B and to the bottom of it. The same is for left and right conditions.
The note also stated that there are cntl sofas to the left of Grandpa Maks's sofa, cntr — to the right, cntt — to the top and cntb — to the bottom.
Grandpa Maks asks you to help him to identify his sofa. It is guaranteed that there is no more than one sofa of given conditions.
Output the number of Grandpa Maks's sofa. If there is no such sofa that all the conditions are met for it then output -1.
Input
The first line contains one integer number d (1 ≤ d ≤ 105) — the number of sofas in the storehouse.
The second line contains two integer numbers n, m (1 ≤ n, m ≤ 105) — the size of the storehouse.
Next d lines contains four integer numbers x1, y1, x2, y2 (1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m) — coordinates of the i-th sofa. It is guaranteed that cells (x1, y1) and (x2, y2) have common side, (x1, y1) ≠ (x2, y2) and no cell is covered by more than one sofa.
The last line contains four integer numbers cntl, cntr, cntt, cntb (0 ≤ cntl, cntr, cntt, cntb ≤ d - 1).
Output
Print the number of the sofa for which all the conditions are met. Sofas are numbered 1 through d as given in input. If there is no such sofa then print -1.
Examples
input
2
3 2
3 1 3 2
1 2 2 2
1 0 0 1
output
1
input
3
10 10
1 2 1 1
5 5 6 5
6 4 5 4
2 1 2 0
output
2
input
2
2 2
2 1 1 1
1 2 2 2
1 0 0 0
output
-1
Note
Let's consider the second example.
The first sofa has 0 to its left, 2 sofas to its right ((1, 1) is to the left of both (5, 5) and (5, 4)), 0 to its top and 2 to its bottom (both 2nd and 3rd sofas are below).
The second sofa has cntl = 2, cntr = 1, cntt = 2 and cntb = 0.
The third sofa has cntl = 2, cntr = 1, cntt = 1 and cntb = 1.
So the second one corresponds to the given conditions.
In the third example
The first sofa has cntl = 1, cntr = 1, cntt = 0 and cntb = 1.
The second sofa has cntl = 1, cntr = 1, cntt = 1 and cntb = 0.
And there is no sofa with the set (1, 0, 0, 0) so the answer is -1.
题意,沙发店里找一个符合上面,下面,左面,右面有几个沙发的沙发,注意,如果两个沙发坐标是(1,1)(2,1)和(1,4)(2,4),那么他们两个的左面和右面各有一个沙发
解法,四个方向分别排序,然后暴力跑每一个沙发,排序方向上坐标符合第几个沙发的就加一,然后最后找找有没有加到4的沙发就可以了,但是有一个要特判,就是如果,符合的太多了,在排序之后还有符合的,且他的排序方向上的两个坐标是不一样的,那么就不存在,比如(1,1)(2,1)和(1,4)(2,4),要你找上面一个,下面0个左边一个,右边0 个的,明显,这时候的右边,都是1个,要输出-1
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#define sf scanf
#define scf(x) scanf("%d",&x)
#define scff(x,y) scanf("%d%d",&x,&y)
#define scfff(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define vi vector<int>
#define mp make_pair
#define pf printf
#define prf(x) printf("%d\n",x)
#define mm(x,b) memset((x),(b),sizeof(x))
#define rep(i,a,n) for (ll i=a;i<n;i++)
#define per(i,a,n) for (ll i=a;i>=n;i--)
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const double eps=1e-6;
const double pi=acos(-1.0);
const int inf=0x7fffffff;
const int N=1e5+7;
struct node
{
int id;
int x1,y1,x2,y2;
}a[N];
void predeal(node &x)
{
if(x.x1==x.x2)
{
if(x.y1>x.y2)
swap(x.y1,x.y2);
}
if(x.y1==x.y2)
{
if(x.x1>x.x2)
swap(x.x1,x.x2);
}
}
bool cmp1(node x,node y)
{
if(x.x2!=y.x2)
return x.x2 <y.x2;
return x.x1 <y.x1;
}
bool cmp2(node x,node y)
{
if(x.x1 !=y.x1)
return x.x1 >y.x1;
return x.x2 >y.x2;
}
bool cmp3(node x,node y)
{
if(x.y2!=y.y2)
return x.y2 <y.y2 ;
return x.y1 <y.y1 ;
}
bool cmp4(node x,node y)
{
if(x.y1 !=y.y1 )
return x.y1 >y.y1;
return x.y2 >y.y2;
}
int num[N];
int main()
{
mm(num,0);
int q;scf(q);
int n,m;scff(n,m);
rep(i,1,1+q)
{
a[i].id=i;
scff(a[i].x1,a[i].y1);
scff(a[i].x2,a[i].y2);
predeal(a[i]);
}
int u,d,l,r;
cin>>l>>r>>d>>u;
sort(a+1,a+q+1,cmp1);
rep(i,1,q+1)
{
if(a[l+1].x1==a[i].x1&&a[l+1].x2==a[i].x2)
{
num[a[i].id]++;
if(i>l+1&&a[i].x1 !=a[i].x2)//在排序方向要不是同一个高度,这样才会加一,如果是同一个高度那么就符合
{
cout<<"-1";return 0;
}
}
}
sort(a+1,a+1+q,cmp2);
rep(i,1,q+1)
{
if(a[r+1].x1==a[i].x1&&a[r+1].x2==a[i].x2)
{
num[a[i].id]++;
if(i>r+1&&a[i].x2!=a[i].x1)
{
cout<<"-1";return 0;
}
}
}
sort(a+1,a+1+q,cmp3);
rep(i ,1,q+1)
{
if(a[d+1].y1==a[i].y1&&a[d+1].y2==a[i].y2)
{
num[a[i].id]++;
if(i>d+1&&a[i].y1!=a[i].y2)
{
cout<<"-1";return 0;
}
}
}
sort(a+1,a+1+q,cmp4);
rep(i,1,q+1)
{
if(a[u+1].y1==a[i].y1&&a[u+1].y2==a[i].y2)
{
num[a[i].id]++;
if(i>u+1&&a[i].y1 !=a[i].y2)
{
cout<<"-1";return 0;
}
}
}
int ans=-1;
rep(i,1,q+1)
if(num[i]==4) ans=i;
prf(ans);
return 0;
}
818C.soft thief的更多相关文章
- Codeforces 817+818(A~C)
(点击题目即可查看原题) 817A Treasure Hunt 题意:给出起点和终点,每次移动只能从 (a,b)移动至(a+x,b+y) , (a+x,b-y) , (a-x,b+y) , (a-x, ...
- 数据库设计中的Soft Delete模式
最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文 ...
- linux內核輸出soft lockup
創建的內核線程長期佔用cpu,一直內核認為線程soft lockup,如無法獲取自旋鎖等:因此線程可適度調用schdule(),以進行進程的調度:因為kwatchdog的執行級別低,一直得不到執行 [ ...
- codeforces 632+ E. Thief in a Shop
E. Thief in a Shop time limit per test 5 seconds memory limit per test 512 megabytes input standard ...
- Codeforces632E Thief in a Shop(NTT + 快速幂)
题目 Source http://codeforces.com/contest/632/problem/E Description A thief made his way to a shop. As ...
- 撤销git reset soft head操作
一不小心在eclipse的git库中执行了Reset Soft(HEAD ONLY)操作,不料界面中竟然没有找到撤销方法(于是心中五味俱全,经过一番折腾,无果还是回归Git本身),最终通过命令行,很快 ...
- git reset soft,hard,mixed之区别深解
GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难以理解,只要你理解到这个命令究竟在干什么. 首先我们来看几个术语 HEAD 这是当前分支版本顶端的别名,也就是在当前分支 ...
- SVM3 Soft Margin SVM
之前分为两部分讨论过SVM.第一部分讨论了线性SVM,并且针对线性不可分的数据,把原始的问题转化为对偶的SVM求解.http://www.cnblogs.com/futurehau/p/6143178 ...
- 强(strong)、软(soft)、弱(weak)、虚(phantom)引用
https://github.com/Androooid/treasure/blob/master/source/lightsky/posts/mat_usage.md 1.1 GC Root JAV ...
随机推荐
- Socketserver的源码分析
Socketserver的源码分析
- 微信支付errcode:40163,code been used,错误小结
1.配置时注意,支付平台中的支付授权目录, 注意大小写. 昨天碰到的问题,就是自己跳转时,路径写的全小写.跳转支付页面也能跳转过去,但是log中总是调用两次code,报40163错误.后改成和公总号支 ...
- 【转】让EntityManager的Query返回Map对象
在JPA 2.0中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句.但当我们查询结果没有对应实体类时,需使用entityManager.create ...
- @validated 验证 List 参数在spring中
@PostMapping(value = "complete") public Vo complete(@Valid @RequestBody @Validated(Complet ...
- python 视频转成代码视频
# -*- coding:utf-8 -*- # coding:utf-8 import os, cv2, subprocess, shutil from cv2 import VideoWriter ...
- onscroll 元素滚动事件
阻止事件冒泡 event.stopPropagation(); children():查找合集里面的第一级子元素.(仅儿子辈,这里可以理解为就是父亲-儿子的关) children只查找第一级的子节点 ...
- tensorflow--mnist注解
我自己对mnist官方例程进行了部分注解,希望分享出来有助于入门选手更好理解tensorflow的运行机制,可以拷贝到IDE再调试看看,看看具体数据流向还有一部分tensorflow里面用到的库.我用 ...
- java 数组排序 插入排序法
插入排序法思想:将n个数字分为前面几个是有序数字集合,后面几个为无序集合.当然尚未排序之前,可以将n0 看为有序数集合,N1-Nn-1 看为等待排序的无序集合.从N1开始将无序数一个一个插入到有序数集 ...
- MySQL ERROR 1820 (HY000)
You must reset your password using ALTER USER statement before executing this statement报错处理 解决方式如下: ...
- Unity中锚点的动态设置
问题背景 在做签到系统时,需求给的效果图如下 效果图像这样,中间是模型,周围其他是签到框这样的布局,我想动态生成各个动态框,涉及到一个定位问题,锚点的设置(动态去设置每个item的位置) 实现方法 S ...