码迷,mamicode.com
首页 > 其他好文 > 详细

HDU4216 Computational Geometry?

时间:2018-05-02 21:01:35      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:3.1   枚举   printf   坐标   pre   sqrt   return   str   can   

题意:已知炸弹的坐标,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;
}

 

HDU4216 Computational Geometry?

标签:3.1   枚举   printf   坐标   pre   sqrt   return   str   can   

原文地址:https://www.cnblogs.com/Noevon/p/8981932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!