向量平行
链接:https://ac.nowcoder.com/acm/contest/11216/A 来源:牛客网
给定n个向量的起点和终点x1,y1,x2,y2,再给出一个目标向量,求能否由n个向量中的两个相加构造出一个与目标向量平行的向量(注意,平行包括方向相同或相反)
保证x1≠x2 y1≠y2
,保证两个向量相加不为零向量
输入描述:
第一行给定一个整数n
接下来n行每行四个整数x1,y1,x2,y2,表示第i个向量的起点和终点
最后一行给出四个整数x1,y1,x2,y2,表示目标向量的起点和终点
1≤n≤1000,1 \leq n \leq 1000,1≤n≤1000,1≤x1,y1,x2,y2≤100001\leq x1,y1,x2,y2 \leq 100001≤x1,y1,x2,y2≤10000
输出描述:
若可以,输出“YES”
否则输出“NO”(均不含引号)
示例1
输入
5
1 2 4 8
2 4 5 10
1 2 2 4
3 5 4 6
6 10 7 11
1 1 4 7
输出
YES
说明
1号向量与3号向量相加
解法
向量(a, b) // (c, d)
的条件是:a * d = b * c
。
向量加法:(a, b) + (c, d) = (a+c, b+d)
。
(其中(a, b)表示一个向量,a是向量的水平分量,b是竖直分量)
求出每个向量,两两组合相加后,分别与目标向量判断平行即可
n = int(input())+ 1
x = [0]*n
y = [0]*n
for i in range(n):
nums = list(map(int, input().split()))
x1, y1, x2, y2 = nums[0], nums[1], nums[2], nums[3]
x[i] = x2-x1 # 求向量的水平分量
y[i] = y2-y1 # 求向量的水垂直分量
def check():
for i in range(n-1):
for j in range(i+1, n-1):
xk = x[i] + x[j]
yk = y[i] + y[j] #两两组合相加
if xk * y[n-1] == yk * x[n-1]:
return True
return False
if check():
print("YES")
else:
print("NO")
最后更新于