概述
小B所在的公司正在开发一个网络游戏项目,他们需要解决场景中攻击双方的占位问题。根据场景设计,攻击双方可能位于某个四边形区域中。所有的攻击方沿直线方向,若攻击目标所在区域与攻击线有交点才能被击中。直线可以表达为Ax+by+C=0。
小B希望确定按指定参数发出的攻击时,给定的区域是否可能被击中。
输入
输入中有多组测试数据。每组测试数据的第一行包含四个空格分隔的整数A、B和C和N,(-210^9<=A, B, C<=210^9, 1 <=N<=106),表示直线方程的参数以及目标矩形区域的数量,保证A2+B^2>0。接下来有N行数据,每行包含8个空格分隔的整数“x1 y1 x2 y2 x3 y3 x4 y4”,表示目标四边形区域的定点坐标。
输出
对每组测试数据所代表的区域,若能够击中,则中单独的行中输出1,否则输出-1。
样例输入
0 1 0 1
-1 0 -1 0 1 0 1 0
1 -1 0 2
0 0 1 0 1 1 0 1
1 2 3 4 5 6 7 8
样例输出
1
1
-1
温馨提示
请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数
#!/bin/python
# -*- coding: utf8 -*-
def ZF(lst1,lst2):
for lst in lst2:
if ((lst1[0]*lst[0] + lst1[1]*lst[1] + lst1[2])*
(lst1[0]*lst[2] + lst1[1]*lst[3] + lst1[2])*
(lst1[0]*lst[4] + lst1[1]*lst[5] + lst1[2])*
(lst1[0]*lst[6] + lst1[1]*lst[7] + lst1[2]))==0:
continue
if not (
(lst1[0]*lst[0] + lst1[1]*lst[1] + lst1[2])>0 and
(lst1[0]*lst[2] + lst1[1]*lst[3] + lst1[2])>0 and
(lst1[0]*lst[4] + lst1[1]*lst[5] + lst1[2])>0 and
(lst1[0]*lst[6] + lst1[1]*lst[7] + lst1[2])>0):
return False
if
not ((lst1[0]*lst[0] + lst1[1]*lst[1]+ lst1[2])<0 and
(lst1[0]*lst[2] + lst1[1]*lst[3] + lst1[2])<0 and
(lst1[0]*lst[4] + lst1[1]*lst[5] + lst1[2])<0 and
(lst1[0]*lst[6] + lst1[1]*lst[7] + lst1[2])<0):
return False
return True
lst1 = [1, -1, 0, 2]
lst2 = [[1 ,2, 3, 4, 5, 6, 7, 8]]
print(ZF(lst1,lst2))
最后
以上就是爱笑皮带为你收集整理的中国移动通信研究院笔试题2的全部内容,希望文章能够帮你解决中国移动通信研究院笔试题2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复