一个饥饿的人被困在了迷宫当中,渴望走出迷宫。 迷宫的大小为 n × m n×m 但很可惜,有很多位置是不能走的。 每一步,你都可以向上下左右移动一次,花费一秒的时间。 但是迷宫被一种魔法包裹,只有移动时间恰好为 s s 秒的人才能走出去。 而你在迷宫中捡到了一个机器,可以帮助你在每一次向上下移动时消耗 k k 秒的时间,而左右走并不会消耗 k k 秒。 那么你能找到一个最小的正实数 k k 使得从起点到终点的最短用时等于 s s 吗? 数据保证有解 输入格式 第一行两个数 n , m n,m 第二行四个数 s x , s y , t x , t y sx,sy,tx,ty。分别表示起点所在行数、列数,终点所在行数、列数。 接下来 n n 行,每行 m m 个数,描述迷宫,其中 0 表示可以走,1 表示不能走。 最后一行一个正实数 s s。 输出格式 输出答案 k k,四舍五入保留 3 位小数。C++


这是一个典型的带有参数调整的最短路径问题,需要找到满足特定条件的参数k。我们可以使用二分查找结合BFS来解决这个问题。 ```cpp #include <iostream> #include <vector> #include <queue> #include <iomanip> #include <cmath> using namespace std; const double EPS = 1e-8; const int INF = 1e9; struct State { int x, y; double time; State(int x, int y, double time) : x(x), y(y), time(time) {} }; int n, m; int sx, sy, tx, ty; vector<vector<int>> maze; double s; bool is_valid(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m && maze[x][y] == 0; } bool check(double k) { vector<vector<double>> dist(n, vector<double>(m, INF)); dist[sx][sy] = 0.0; queue<State> q; q.push(State(sx, sy, 0.0)); int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; while (!q.empty()) { State curr = q.front(); q.pop(); if (abs(curr.time - dist[curr.x][curr.y]) > EPS) continue; for (int i = 0; i < 4; ++i) { int nx = curr.x + dx[i]; int ny = curr.y + dy[i]; if (!is_valid(nx, ny)) continue; double new_time = curr.time; if (i < 2) { // up or down new_time += k; } else { // left or right new_time += 1.0; } if (new_time < dist[nx][ny] - EPS) { dist[nx][ny] = new_time; q.push(State(nx, ny, new_time)); } } } return abs(dist[tx][ty] - s) < EPS; } int main() { cin >> n >> m; cin >> sx >> sy >> tx >> ty; sx--; sy--; tx--; ty--; // convert to 0-based index maze.resize(n, vector<int>(m)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> maze[i][j]; } } cin >> s; double left = 0.0, right = 1e6; double ans = 0.0; while (right - left > EPS) { double mid = (left + right) / 2; if (check(mid)) { ans = mid; right = mid; } else { left = mid; } } cout << fixed << setprecision(3) << ans << endl; return 0; } ``` 1. 二分查找的精度控制很重要,EPS设置为1e-8可以保证足够的精度。 2. BFS实现时需要注意处理浮点数比较的精度问题,使用EPS进行比较。 3. 移动方向的代价计算需要区分上下移动和左右移动,上下移动消耗k秒,左右移动消耗1秒。 [2025-07-01 15:27:29 | AI写代码神器 | 735点数解答]
- 一个饥饿的人被困在了迷宫当中,渴望走出迷宫。 迷宫的大小为 n × m n×m 但很可惜,有很多位置是不能走的。 每一步,你都可以向上下左右移动一次,花费一秒的时间。 但是迷宫被一种魔法包裹,只有移动时间恰好为 s s 秒的人才能走出去。 而你在迷宫中捡到了一个机器,可以帮助你在每一次向上下移动时消耗 k k 秒的时间,而左右走并不会消耗 k k 秒。 那么你能找到一个最小的正实数 k k 使得从起点到终点的最短用时等于 s s 吗? 数据保证有解 输入格式 第一行两个数 n , m n,m 第二行四个数 s x , s y , t x , t y sx,sy,tx,ty。分别表示起点所在行数、列数,终点所在行数、列数。 接下来 n n 行,每行 m m 个数,描述迷宫,其中 0 表示可以走,1 表示不能走。 最后一行一个正实数 s s。 输出格式 输出答案 k k,四舍五入保留 3 位小数。C++ (735点数解答 | 2025-07-01 15:27:29)51
- 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(385点数解答 | 2025-01-08 03:43:54)251
- 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(346点数解答 | 2025-01-08 03:46:29)251
- java项目:c1小型汽车科目一模拟考试系统的设计与实现 系统主要功能如下: (1)用户登录。 (2)题库管理,管理员对试题信息的增、删、改、查、导人、导出管理,试题包括单选题、多选题和判断题3种题型。选择题包括题干、选项a、选项b、选项c、选项d、答案、题目解析等,判断题包括题干、选项a、选项b、答案、题目解析等。 (3)模拟考试。每一套试卷包括100道题目,题型为判断题和单项选择题,每道题目1分,满分100分,试题随机来源于题库。每一次试卷练习时间规定为45分钟,超时系统会自动交卷结束考试。答题过程中错11分(11道题)即终止本场考试。点击交卷后,系统会提供简单统计,比如得分,答对几道题,答错几道题,未答几道题,用时。 (4)历史成绩,统计模拟考试历次成绩。 (5)专项练习,分类别重点突破,比如现场急救题、责任判定题。 (6)章节练习,按照法规章节分类练习,比如第4章 道路交通事故处理相关规定。 (7)易错题练习,准确把握考试难点,收集容易出错的题目。 3 (8)错题本。练习或模拟考试出错的题目可以进入错题本,逐个突破。(555点数解答 | 2024-12-09 10:49:37)204
- java项目:c1小型汽车科目一模拟考试系统的设计与实现 系统主要功能如下: (1)用户登录。 (2)题库管理,管理员对试题信息的增、删、改、查、导人、导出管理,试题包括单选题、多选题和判断题3种题型。选择题包括题干、选项a、选项b、选项c、选项d、答案、题目解析等,判断题包括题干、选项a、选项b、答案、题目解析等。 (3)模拟考试。每一套试卷包括100道题目,题型为判断题和单项选择题,每道题目1分,满分100分,试题随机来源于题库。每一次试卷练习时间规定为45分钟,超时系统会自动交卷结束考试。答题过程中错11分(11道题)即终止本场考试。点击交卷后,系统会提供简单统计,比如得分,答对几道题,答错几道题,未答几道题,用时。 (4)历史成绩,统计模拟考试历次成绩。 (5)专项练习,分类别重点突破,比如现场急救题、责任判定题。 (6)章节练习,按照法规章节分类练习,比如第4章 道路交通事故处理相关规定。 (7)易错题练习,准确把握考试难点,收集容易出错的题目。 3 (8)错题本。练习或模拟考试出错的题目可以进入错题本,逐个突破。(36点数解答 | 2024-12-13 17:35:26)124
- 一个 5×6 的迷宫样例如下: 要求给出从起点(1,1)到终点(3,4)的路径。 为了处理方便,保证最外圈全都为障碍物。 扩展到一般情况,一个 m×n 的迷宫,要求输出从起点(1,1)到终点(m-2,n-2)的路径。 测试实例保证路径是唯一的。 该题要求自行设计一个栈来做。如果设计的是顺序栈,则保证栈的大小不超过 200 个元素。 输入 第一行为两个整数 m 和 n,表示 m×n 的迷宫。 接下来有 m 行,每行有 n 个数(n 个数之间用空格间隔,值 = 0 表示可以通行,值 = 1 表示为障碍物) 输出 输出从起点到终点的路径,每个坐标占一行,坐标间的行号和列号用一个空格间隔。具体格式可参考样例。c++ 源代码(732点数解答 | 2024-11-03 02:34:53)301
- 描述 给定一个 n × n 的矩阵,在其上进行若干次操作。每次操作,你可以将一个 k × k 的连续子矩阵里的所有数全部加上1或者全都减去1。 初始时,矩阵中有 m 个位置上的数不为 0 ,其他位置上的数均为 0。请问至少需要多少次操作,可以将矩阵中的所有数字都变为 0。 格式 输入 第一行三个整数 n, m, k 分别表示矩阵大小、非零格数和每次修改的连续子矩阵大小。 接下来 m 行,每行三个整数 x, y, z 表示初始时矩阵的第 x 行第 y列上的数为z 。 输出 一行,一个整数,表示最少操作次数。特别地,如果无法使矩阵中所有数都变为0,输出-1.(360点数解答 | 2024-10-24 14:05:14)172
- c++ 背景 玩过商场中的人体打印墙吗? 描述 给定一个 n × n 的矩阵,在其上进行若干次操作。每次操作,你可以将一个 k × k 的连续子矩阵里的所有数全部加上1或者全都减去1。 初始时,矩阵中有 m 个位置上的数不为 0 ,其他位置上的数均为 0。请问至少需要多少次操作,可以将矩阵中的所有数字都变为 0。 格式 输入 第一行三个整数 n, m, k 分别表示矩阵大小、非零格数和每次修改的连续子矩阵大小。 接下来 m 行,每行三个整数 x, y, z 表示初始时矩阵的第 x 行第 y列上的数为z 。 输出 一行,一个整数,表示最少操作次数。特别地,如果无法使矩阵中所有数都变为0,输出-1.(814点数解答 | 2024-10-24 14:06:12)177
- 定义具有继承关系的点类point和圆类circle和测试类mainclass, point类具有x,y两个属性,用于表示点的坐标(整数),为point类添加相应构造方法point(x,y)。(2)circle类为point类的子类,它本身包含半径radius(整数),为circle类添加相应构造方法circle(x,y ,radius),求周长(小数)getperi ()和求面积(小数)getarea0)的方法,在方法中打印相关结果(公式:周长=2*3.14*半径,面积=3.14*半径*半径)。 (3)创建测试类mainclass,在其main方法中创建circle类对象c,圆心坐标(50,30),半径为4,调用对象c的相关方法打印的圆的周长和面积。(246点数解答 | 2024-11-11 16:36:30)189
- c++描述 一天,一个画家在森林里写生,突然爆发了山洪,他需要尽快返回住所中,那里是安全的。 森林的地图由R行C列组成,空白区域用点“.”表示,洪水的区域用“*”表示,而岩石用“X”表示,另画家的住所用“D”表示,画家用“S”表示。 有以下几点需要说明: 1.每一分钟画家能向四个方向移动一格(上、下、左、右)。 2.每一分钟洪水能蔓延到四个方向的相邻格子(空白区域)。 3.洪水和画家都不能通过岩石区域。 4.画家不能通过洪水区域(同时也不行,即画家不能移到某个格子,该格子在画家达到的同时被洪水蔓延到了,这也是不允许的)。 5. 洪水蔓不到画家的住所。 给你森林的地图,编写程序输出最少需要花费多长时间才能从开始的位置赶回家中。 输入描述 输入第一行包含两个整数R和C(R,C<=50)。 接下来R行每行包含C个字符(“.”、“*”、“X”、“D”或“S”)。 地图保证只有一个“D”和一个“S”。 输出描述 输出画家最快安全到达住所所需的时间,如果画家不可能安全回家则输出“KAKTUS”。 用例输入 1 3 3 D.* ... .S. 用例输出 1 (1384点数解答 | 2025-03-16 17:33:49)226
- - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内 (571点数解答 | 2025-08-23 20:54:40)52
- - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内,并且可以增加新的一样的文本(1317点数解答 | 2025-08-23 20:58:40)46