题目名称 1664. [POJ 2841] 航海游戏
输入输出 navigationgame.in/out
难度等级 ★★★☆
时间限制 2000 ms (2 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatarcstdio 于2014-06-12加入
开放分组 全部用户
提交状态
分类标签
POJ 动态规划 单调队列 斜率优化
分享题解
通过:6, 提交:26, 通过率:23.08%
Gravatar_Itachi 100 0.277 s 9.02 MiB C++
GravatarL_in 100 0.394 s 9.08 MiB C++
GravatarrpCardinal 100 0.595 s 1.18 MiB C++
GravatarrpCardinal 100 0.797 s 2.97 MiB C++
Gravatar葳棠殇 100 1.124 s 1.18 MiB C++
Gravatarcstdio 100 2.671 s 5.47 MiB C++
GravatarrpCardinal 90 0.797 s 2.97 MiB C++
GravatarrpCardinal 90 0.801 s 2.67 MiB C++
GravatarrpCardinal 60 0.914 s 18.51 MiB C++
GravatarrpCardinal 60 0.955 s 18.51 MiB C++
关于 航海游戏 的近10条评论(全部评论)
感谢COGS的数据让我找到了一个极其不起眼的BUG,感谢给我提示的 @cstdio 同学!
GravatarrpCardinal
2014-12-26 17:17 5楼
回复 @digital-T @Chenyao2333:
今!天!没!吃!药!感!觉!自!己!萌!萌!哒!
Gravatarcstdio
2014-06-12 23:02 4楼
回复 @cstdio :
Orzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Gravatardigital-T
2014-06-12 20:13 3楼
回复 @cstdio :
Orzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
GravatarChenyao2333
2014-06-12 10:32 2楼
真难……
式子推错是几个意思……
数据淼,但不代表凸包维护写错了也能过,因为有4组数据是我精心对拍出来的→_→
Gravatarcstdio
2014-06-12 10:21 1楼

1664. [POJ 2841] 航海游戏

★★★☆   输入文件:navigationgame.in   输出文件:navigationgame.out   简单对比
时间限制:2 s   内存限制:256 MiB

【题目描述】

这里有一个N行M列的方阵,第N行象征着这里,第1行象征着海那边的彼岸。这中间的N-2行象征着你所期盼的大海。

你的目标是,控制一艘船,从这里的任意一个停泊处(用“H”表示),经过最短的航行时间到达对岸的任意一个停泊处。只有这样,你才可以通过这个通道。

你的船只能向左,向右或向上前进,一次一格,而且除非登陆(这时你必须到达一个停泊处,从而结束你的游戏),你是不能驶向陆地的。

记住,人生没有回头路。因此,一旦你离开一个格子,就永远也无法返回。

向着目标航行永远是一件令人愉快的事情。因此向上航行只需要消耗一个单位的时间。但是,看似原地打转的左右方向的航行会让人厌倦。如果某次左右航行之前你已经连续进行了x次左右航行,你这次左右航行所消耗的时间就是x+1个时间单位。

海上你可能会遇到:

O:障碍物。障碍物占据的格子,你永远也不会到达。

F:命运之轮。经过这里,你的命运会从此逆转。我了解你的命运有多么不幸。因此,你必须在航行途中经过奇数次命运之轮,才能安全到达彼岸。

B:祝福石。走到这里是不需要时间的。

S:暴风雨的咒符。走到这里所需的时间是正常情况的两倍。

【输入格式】

第一行有两个整数N,M,代表地图大小。N,M不超过1000.

接下来有N行,每行有M个字符,描述了地图:

在第1行和第N行中,‘H’代表停泊处。

在其余行中,‘.’,‘O’,‘F’,‘B’,‘S’分别代表空格子,障碍物,命运之轮,祝福石,暴风雨的咒符。

【输出格式】

如果解存在,输出一个整数,即需要的最短时间,否则输出“No solution”。

【样例输入】

5 11

...H...H...

.O.BF.FS.O.

O.O.OOO.O.O

.O...F...O.

.....H.....

【样例输出】

6

【提示】

样例如图:

【来源】

POJ 2841 Navigation Game

翻译by 陈雪,《问题中的变与不变》