【样例输入输出1】
carpet.in | carpet.out |
3 1 0 2 3 0 2 3 3 2 1 3 3 2 2 | 3 |
【样例输入输出2】
carpet.in | carpet.out |
3 1 0 2 3 0 2 3 3 2 1 3 3 4 5 | -1 |
很明显的水题啦,读数O(n),处理的时候循环一次O(n)就可得到答案,所以O(2n)就可以得到出解
判断一个点是否在矩形内如下图
所以这样代码就很好实现了
program carpet;
var
n,g,k:longint;
x,y,xx,yy:array[0..100000+10] of longint;
ans:longint;
procedure init;
begin
assign(input,'carpet.in');
assign(output,'carpet.out');
reset(input);
rewrite(output);
end;
procedure outit;
begin
close(input);
close(output);
halt;
end;
procedure readdata;
var
i,a,b:longint;
begin
read(n);
for i:=1 to n do
begin
read(x[i],y[i],a,b);
xx[i]:=x[i]+a;
yy[i]:=y[i]+b;
end;
read(g,k);
end;
procedure main;
var
i:longint;
begin
ans:=-1;
for i:=1 to n do
begin
if (g>=x[i])and(g<=xx[i])and(k>=y[i])and(k<=yy[i]) then
ans:=i;
end;
writeln(ans);
end;
begin
init;
readdata;
main;
outit;
end.