uvalive 3616
2015-08-07 20:15
337 查看
题意:给出了空间内的n颗星星的坐标,有m个望远镜,每个望远镜的初始观测点都是(0,0,0),给出每个望远镜的一个截面的圆心坐标和角度,问最多能看到多少个星星。
题解:可以想象出如果望远镜能观测到星星,那么望远镜中轴线和星星两个向量角度差不会超过望远镜本身的角度,所以直接计算角度差判断就可以了。
题解:可以想象出如果望远镜能观测到星星,那么望远镜中轴线和星星两个向量角度差不会超过望远镜本身的角度,所以直接计算角度差判断就可以了。
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const double eps = 1e-9; const double PI = acos(-1); struct Point3 { double x, y, z; Point3(double x = 0, double y = 0, double z = 0):x(x), y(y), z(z) {} }; typedef Point3 Vector3; int dcmp(double x) { if (fabs(x) < eps) return 0; return x < 0 ? -1 : 1; } Vector3 operator + (Vector3 A, Vector3 B) { return Vector3(A.x + B.x, A.y + B.y, A.z + B.z); } Vector3 operator - (Vector3 A, Vector3 B) { return Vector3(A.x - B.x, A.y - B.y, A.z - B.z); } Vector3 operator * (Vector3 A, double b) { return Vector3(A.x * b, A.y * b, A.z * b); } Vector3 operator / (Vector3 A, double b) { return Vector3(A.x / b, A.y / b, A.z / b); } double Dot (Vector3 A, Vector3 B) { return A.x * B.x + A.y * B.y + A.z * B.z; } double Length(Vector3 A) { return sqrt(Dot(A, A)); } double Angle(Vector3 A, Vector3 B) { return acos(Dot(A, B) / Length(A) / Length(B)); } const int N = 505; Point3 P , T ; int n, m; double w ; int main() { while (scanf("%d", &n) == 1 && n) { for (int i = 0; i < n; i++) scanf("%lf%lf%lf", &P[i].x, &P[i].y, &P[i].z); scanf("%d", &m); for (int i = 0; i < m; i++) scanf("%lf%lf%lf%lf", &T[i].x, &T[i].y, &T[i].z, &w[i]); int res = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { double rad = Angle(P[i], T[j]); if (dcmp(rad - w[j]) < 0) { res++; break; } } printf("%d\n", res); } return 0; }
相关文章推荐
- 浅谈对主成分分析(PCA)算法的理解
- C#高级编程----反射的小结
- UVa-12166 Equilibrium Mobile
- Nginx负载均衡配置实例详解
- (素材源码)swanzhu学IOS(三)打飞机
- 在visual studio 2010中调用ffmpeg
- 伊斯坦布尔之旅第一站:韩国仁川机场免费中转旅游
- Linux 下面安装redis
- Android之SDK如何更新
- NSURLConnection使用
- 微软源代码管理工具TFS2013安装与使用详细图文教程(Vs2013)
- HDU2303(数论)大整数求余+素数筛选
- 阿里云服务器ubuntu安装java运行环境
- 蓝牙的RSSI转换为信号强度百分百
- HDU - 4287 Intelligent IME 字典树
- HDU-1686-Oulipo
- POJ 1001(Exponentiation)
- 淘宝之HBase MapReduce实例分析
- HDU2303(数论)大整数求余+素数筛选
- YTU 2892 免费看电影 贪心