HDU4216 Computational Geometry?
题意:已知炸弹的坐标,n个向量(n<100),从原点出发,每个向量可以走正向或者反向,找到一条路,使得路上离炸弹最远的点的距离最大,问最大距离
题解:要求最远距离,也就是向量要尽量取同一方向才能更远,可以枚举方向,算出最大的就是答案
#include <bits/stdc++.h> #define maxn 100 #define PI 3.14159265358979323846 #define Vector Point using namespace std; typedef long long ll; struct Point { double x, y; }a[maxn], c, e, b; int main(){ int T, ca = 1, n; double ma; scanf("%d", &T); while(T--){ scanf("%d%lf%lf", &n, &c.x, &c.y); for(int i=0;i<n;i++) scanf("%lf%lf", &a[i].x, &a[i].y); ma = 0; for(int j=0;j<360;j+=2){ b.x=b.y=0; e.y = sin(2*PI/360*j); e.x = cos(2*PI/360*j); for(int i=0;i<n;i++){ if(e.x*a[i].x+e.y*a[i].y >= 0) b.x-=a[i].x,b.y-=a[i].y; else b.x+=a[i].x,b.y+=a[i].y; ma = max(ma, (b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y)); } } printf("Case %d: %.3f\n", ca++, sqrt(ma)); } return 0; }
posted on 2018-05-02 19:06 2855669158 阅读(206) 评论(0) 编辑 收藏 举报