关闭

uva 10553 Treasure Map (指南针偏差航海寻宝)

414人阅读 评论(0) 收藏 举报

题意:给了一张地图,按照正常的路线,可以恰好到达那个有宝藏的小岛,由于地理北极和地磁北极方向有别,导致每次转向都有角度偏差,求按照地图航行过程中,距离小岛的最短路径

分析:先求出小岛位置,然后按照偏差计算,每条直线距离小岛距离,取最小即可

#include <bits/stdc++.h>
#include <iostream>

using namespace std;
const double eps = acos(-1.0);
int  n;
double num;
string str[32] = {"N", "NbE", "NNE", "NEbN", "NE", "NEbE", "ENE", "EbN", "E", "EbS", "ESE", "SEbE", "SE", "SEbS", "SSE",
"SbE", "S", "SbW", "SSW", "SWbS", "SW", "SWbW", "WSW", "WbS", "W", "WbN", "WNW", "NWbW", "NW", "NWbN", "NNW", "NbW"
};
struct Point
{
    double x;double y;
    Point(){};   //不加这一句,有的编译器会报错,no matching function for call to ...
    Point(const double xx,const double yy)
    {
        x = xx; y = yy;
    }
};
struct Road
{
    double x;
    double y;
    Road(const double xx,const double yy)
    {
        x = xx; y = yy;
    }
};
map<string,double> direction;
vector<Road> road;
void init()
{
    for(int i = 0; i < 32; i++)
    {
        direction[str[i]] = eps*i/16;
    }
}
void read()
{
    road.clear();
    string str0;
    double num0;
    for(int i = 0; i< n; i++)
    {
        cin >> str0 >> num0;
        road.push_back(Road(direction[str0],num0));

    }
    cin >> num;
    num = num *eps /180;
}
double dis(Point p1,Point p2)
{
    return sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y));
}
double dot(Point p0,Point p1,Point p2){  //p0p1点乘 p0p2;
	return (p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y);
}

struct line{
	Point a,b;
	line(const Point a0,const Point b0){a=a0;b=b0;}
	double getdis(Point p){//点到线段的最小距离
		if(dot(a,p,b)<0 || dot(b,p,a)<0) return min(dis(p,a),dis(p,b));
		else{
			double a0,b0,c0;
			a0=a.y-b.y;
			b0=b.x-a.x;
			c0=a.x*b.y-b.x*a.y;
			return fabs(a0*p.x+b0*p.y+c0)/sqrt(a0*a0+b0*b0);
		}
	}
};
void computing()
{
    Point d(0,0),t(0,0),pre;
	for(int i=0;i<n;i++){
		d.x+=cos(road[i].x)*road[i].y;
		d.y+=sin(road[i].x)*road[i].y;
	}
	double ans=dis(d,t);
	for(int i=0;i<n;i++){
		pre=t;
		t.x+=cos(road[i].x-num)*road[i].y;
		t.y+=sin(road[i].x-num)*road[i].y;
		line l(pre,t);
		ans=min(ans,l.getdis(d));
	}
	printf("%.2lf\n",ans);
}
int main()
{

    init();
    while(scanf("%d",&n)&&n)
    {
        read();
        computing();
    }
    return 0;
}


0
0
查看评论

uva 10553 Treasure Map

题意:给你海盗的航海路线,终点为宝藏地点,然后你的路线是按照海盗的航海路线偏移一定的角度去航行,求你在途中距离宝藏最近的是相距多少。 分析:先求出宝藏地点,然后求出宝藏地点到你航行的所有边的距离 #include #include #incl...
  • itaskyou
  • itaskyou
  • 2016-05-25 16:53
  • 475

uva 10553 Treasure Map (藏宝图)

Problem E: Treasure Map You have come into possession of a pirate map that gives a series of steps to get from your landing place on a desert isle to&...
  • a1061747415
  • a1061747415
  • 2013-05-18 22:05
  • 1254

【Android开发VR实战】三.开发一个寻宝类VR游戏TreasureHunt

【Android开发VR实战】三.开发一个寻宝类VR游戏TreasureHunt VR即Virtual Reality虚拟现实。虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。 ...
  • u010785585
  • u010785585
  • 2016-12-30 09:31
  • 5863

zoj Treasure Map

//WA哭了 特么自己把n,m写反了!//简单dancing link优化!#include #include #include #include #include #include #include #include #include #include using namespace std;co...
  • xiayang05
  • xiayang05
  • 2011-06-20 15:24
  • 555

zoj-3209 Treasure Map【Dancing link x】

B - Treasure Map Time Limit:2000MS    Memory Limit:32768KB    64bit IO Format:%lld & %llu SubmitStatus ...
  • a915800048
  • a915800048
  • 2016-03-23 22:01
  • 253

ZOJ_3029_TreasureMap(DancingLinksX精确覆盖)

Treasure Map Time Limit: 2 Seconds      Memory Limit: 32768 KB Your boss once had got many copies of a treasure ...
  • baidu_29410909
  • baidu_29410909
  • 2016-04-30 23:47
  • 207

【NOIP2012】寻宝 模拟

【NOIP2012】寻宝 模拟原来一直都理解错了题意……记录一下每层有多少个有楼梯的房间比如有 3 个房间有楼梯, 需要找到第 4 个房间, 那就相当于找到第 1 个房间通过这样减少模拟次数。代码#include <cstdio> #include <cstring> #in...
  • LOI_QER
  • LOI_QER
  • 2016-11-10 07:26
  • 557

蓝桥杯 地宫寻宝 带缓存的DFS

题目 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。  地宫的入口在左上角,出口在右下角。  小明被带到地宫的入口,国王要求他只能向右或向下行走。  走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小...
  • liuyi1207164339
  • liuyi1207164339
  • 2015-09-23 20:23
  • 625

ZOJ 3209 Treasure Map(精确覆盖问题&舞蹈链)

题目链接:[kuangbin带你飞]专题三 Dancing Links B - Treasure Map题意 给一矩形和k个小矩形,问选取最小数量为多少的小矩形可以对大矩形进行精确覆盖。 思路 仍然是个模版题,把二维的n*m的大矩形看作是一维的n*m的一条线。k个小矩形同理,那么就转化成01...
  • to_be_better
  • to_be_better
  • 2016-02-21 18:50
  • 937

蓝桥杯 地宫寻宝 【dp】

问题描述   X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。   地宫的入口在左上角,出口在右下角。   小明被带到地宫的入口,国王要求他只能向右或向下行走。   走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2016-03-19 21:40
  • 528
    个人资料
    • 访问:81859次
    • 积分:2537
    • 等级:
    • 排名:第17030名
    • 原创:175篇
    • 转载:32篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论