CF2181I Irrigation Interlock

题目描述

两个灌溉合作社共用一个肥沃的山谷。第一家合作社在田野间维护着若干台泵站;第二家合作社负责监督周围山丘上的水库。每当两个合作社决定分别铺设两根新管道时,这两根管道必须相交——在交点处可以安装一个联合阀门。每根管道总是沿着连接两个不同泵站或两个不同水库的直线段。两根管道若有至少一个公共点,则认为它们相交(无论仅接触还是重合,都算作相交)。 已知每个泵站和每个水库在平面直角坐标系上的精确坐标。对于每个规划方案,判断第一合作社是否能够选出两个不同的泵站、第二合作社是否能够选出两个不同的水库,使得各自连成的两条直线管道相交。如果可能,输出所选泵站和水库的编号;否则,说明该工程无法实现。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^5$),表示规划方案的数量。 对于每个规划方案: 第一行包含一个整数 $n$($2 \le n \le 10^5$),表示第一合作社管理的泵站数量。 接下来的 $n$ 行,每行包含两个整数 $x_i$ 和 $y_i$($|x_i|, |y_i| \le 10^9$),表示第 $i$ 个泵站的坐标。所有泵站的位置各不相同。 接下来一行包含一个整数 $m$($2 \le m \le 10^5$),表示第二合作社管理的水库数量。 接下来的 $m$ 行,每行包含两个整数 $u_j$ 和 $v_j$($|u_j|, |v_j| \le 10^9$),表示第 $j$ 个水库的坐标。所有水库的位置各不相同。 任意一个泵站的位置都不会与任意一个水库的位置重合。 保证所有规划方案中 $n$ 的总和不超过 $2 \times 10^5$,所有 $m$ 的总和也不超过 $2 \times 10^5$。

输出格式

对于每个规划方案: 如果第一个合作社能选出两个泵站、第二个合作社能选出两个水库,使得各自连线的直线段相交,则输出四个整数 $p_1$、$p_2$、$r_1$、$r_2$——表示所选两个泵站($1 \le p_1, p_2 \le n$,$p_1 \ne p_2$)和所选两个水库($1 \le r_1, r_2 \le m$,$r_1 \ne r_2$)的编号。 如果不存在这样的选择,使得直线相交,则输出 $-1$。 如有多种方案,输出任意一种均可。

说明/提示

![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181I/0be3dc6b90da7e6cfa407e94f04a108213d372753c2e9ad387692d7d1334bc00.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181I/c9c70cecea94645f5e103b31154eed668d81f0ac9b80857136730b91101fdb73.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181I/51d5d50339c6bc586a798a8fff9f02b1e38c6d5431b46ebf769559b29b4367d8.png) 规划方案 1 规划方案 2 规划方案 3 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2181I/0dd0d46f1486d7a5c3fa1598ad8406d0acabd7879a22c5e8f72163172d6a99e2.png) 由 ChatGPT 5 翻译