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 ...
随机推荐
- python3 正则表达式学习笔记
re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. ~匹配成功re.match方法返回一个匹配的对象,否则返回No ...
- python把列表前几个元素提取到新列表
需要添加几个就循环几次 list = ['a','b','c','d','e'] new_list = [] for i in range(3): print(list[i]) new_list. ...
- express 实践
截图: 这个项目的数据是根据之前瓜子网爬虫爬的北京区数据 express + mongodb + pug(jade) + flex.css: 项目地址: https://github.com/uust ...
- python正则表达式基础,以及pattern.match(),re.match(),pattern.search(),re.search()方法的使用和区别
正则表达式(regular expression)是一个特殊的字符序列,描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子字符串. 将匹配的子字符串替换或者从某个字符串中取出符合某个条件 ...
- kmp算法 模板
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...
- 如何进行PDF页码编排,如何调整PDF页码顺序
PDF文件的页码顺序如何进行调整?许多小伙伴们都不知道,我们在编辑的时候只知道PDF文件的编辑方法,但是调整页码的顺序我们或许不会,但是如何去进行操作呢?看小编的方法吧!如果我们想要修改PDF文件中的 ...
- iOS UINavigationController Class Translation
类 UINavigationController 一个容器视图控制器,定义了用于导航分层内容的基于堆栈的方案. 概述 导航控制器是一个在导航界面中,管理一个或多个子视图控制器的容器视图控制 ...
- BLO(bzoj1123)
Description Byteotia城市有n个 towns, m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n和 ...
- 使用X509Certificate2类操作证书文件
public class CertHelper { string pfxPath = @"E:\开发辅助项目\cert\taisuyuanqing.pfx"; string cer ...
- XMLHttpRequest中常用的方法
a.) abort() 停止当前请求b.) getAllResponseHeaders() 把HTTP请求的所有响应首部作为键值对返回c.) open("method", &quo ...