#19276. 航海家的坐标

航海家的坐标

第一部分:背景知识讲解

本题结合了初中地理中的 “经纬网与定位” 知识,考察编程中的 模拟边界处理以及循环修正

1. 经度 (Longitude)与纬度 (Latitude)

地球表面被经线和纬线交织成网格,用来确定位置。为了编程简化,我们将其视为一个二维坐标系。

  • 纬度 (xx)
    • 赤道00^\circ
    • 向北为正(北纬),最高 +90+90^\circ(北极点)。
    • 向南为负(南纬),最低 90-90^\circ(南极点)。
    • 边界规则:到达极点后,无法继续向北或向南移动(会被挡住)。
  • 经度 (yy)
    • 本初子午线00^\circ
    • 向东为正(东经),向西为负(西经)。
    • 范围通常定义为 (180,180](-180, 180]。即 180180^\circ 经线是东西经的分界线。
    • 循环规则:经度是可以循环的。
      • 向东穿过 180180^\circ 会变成 179-179^\circ \dots
      • 向西穿过 180-180^\circ 会变成 179179^\circ \dots
      • 数学公式:如果坐标 yy 超出范围,可以通过加减 360360 来修正。

第二部分:题目内容

题目名称:航海家的坐标 (The Navigator's Coordinates)

题目描述

小杨是一名初出茅庐的航海家,他正驾驶着“探索号”帆船在广阔的太平洋上航行。

为了简化导航,我们将地球表面看作一个经纬度坐标系:

  • 纬度 (Latitude) 用整数 xx 表示,范围是 [90,90][-90, 90]
  • 经度 (Longitude) 用整数 yy 表示,范围是 (180,180](-180, 180]

小杨从起始坐标 (x0,y0)(x_0, y_0) 出发,执行了 NN 条航行指令。每条指令包含一个方向字符和一个整数距离(度数):

  • N:向北移动(纬度增加)。
  • S:向南移动(纬度减小)。
  • E:向东移动(经度增加)。
  • W:向西移动(经度减小)。

移动规则如下:

  1. 纬度限制(极点阻挡):如果向北移动导致纬度超过 9090,则船只会停在北极点(9090);同理,向南移动最低只能停在南极点(90-90)。
  2. 经度循环(环球航行)
    • 如果向东移动导致经度 y>180y > 180,则经度变为 y360y - 360
    • 如果向西移动导致经度 y180y \le -180,则经度变为 y+360y + 360
    • 注意:经度可能会连续跨越多次。

请你编写程序,计算执行完所有指令后,小杨帆船的最终坐标 (x,y)(x, y)

输入格式

第一行包含三个整数 N,x0,y0N, x_0, y_0

  • NN 表示指令数量。
  • x0x_0 表示起始纬度。
  • y0y_0 表示起始经度。

接下来 NN 行,每行包含一个字符 DD 和一个整数 VV

  • DDN, S, E, W 中的一个,表示方向。
  • VV 表示移动的度数。

输出格式

输出一行,包含两个整数 xxyy,用空格隔开,表示最终的纬度和经度。

输入输出样例 #1

输入:

3 0 170
E 20
N 100
E 10

输出:

90 -160

样例 #1 解释:

  1. 初始(0,170)(0, 170)
  2. 指令 E 20:向东 20 度。经度 170+20=190170 + 20 = 190
    • 因为 190>180190 > 180,跨越日界线,经度变为 190360=170190 - 360 = -170
    • 坐标变为 (0,170)(0, -170)
  3. 指令 N 100:向北 100 度。纬度 0+100=1000 + 100 = 100
    • 因为 100>90100 > 90,被北极点挡住,纬度变为 9090
    • 坐标变为 (90,170)(90, -170)
  4. 指令 E 10:向东 10 度。经度 170+10=160-170 + 10 = -160
    • 坐标变为 (90,160)(90, -160)

输入输出样例 #2

输入:

2 0 -170
W 20
S 100

输出:

-90 170

样例 #2 解释:

  1. 指令 W 20:向西 20 度。经度 17020=190-170 - 20 = -190
    • 因为 190180-190 \le -180,修正为 190+360=170-190 + 360 = 170
    • 坐标变为 (0,170)(0, 170)
  2. 指令 S 100:向南 100 度。纬度 0100=1000 - 100 = -100
    • 因为 100<90-100 < -90,被南极点挡住,纬度变为 90-90
    • 坐标变为 (90,170)(-90, 170)

数据范围

对于 100%100\% 的数据:

  • 1N10001 \le N \le 1000
  • 90x090-90 \le x_0 \le 90
  • 179y0180-179 \le y_0 \le 180
  • 0V3600 \le V \le 360