[R28A]灯塔


数据规模:1T1001 \le T \le 100109x1,y1,x2,y2109-10^9 \le x_1, y_1, x_2, y_2 \le 10^9,且 (x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2) 均不为 (0,0)(0,0)

思路

两束光线分别沿向量 (x1,y1)(x_1, y_1)(x2,y2)(x_2, y_2) 方向发射,它们在原点形成直角等价于这两个方向向量互相垂直,也就是点积为 00

x1×x2+y1×y2=0x_1 \times x_2 + y_1 \times y_2 = 0

直接读入每组数据计算即可。坐标绝对值最大为 10910^9,点积的绝对值最大为 2×10182 \times 10^{18},在 Int64 范围内,无需担心溢出。

复杂度

时间 O(T)O(T),空间 O(1)O(1)

仓颉实现

import std.env.*
import std.convert.*

main(): Int64 {
    let reader = getStdIn()
    let t = Int64.parse(reader.readln().getOrThrow())
    for (_ in 0..t) {
        let a = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
        let x1 = a[0]
        let y1 = a[1]
        let x2 = a[2]
        let y2 = a[3]
        if (x1 * x2 + y1 * y2 == 0) {
            println("Yes")
        } else {
            println("No")
        }
    }
    return 0
}