我试图写一个简短的解决方案的谷歌启动问题在2020年第B轮,并始终得到一个WA。我试着找出哪里出了问题,但什么也没发现。我甚至下载了其他人的已通过的代码,并编写了一个dataset创建者,让两个程序运行并比较结果,但是在运行了100,000多组数据后,没有发现什么不同的地方。我现在有点疯了,你能帮我看看我的代码出了什么问题吗?
以下是一个问题:
珍玛正在机器人竞赛中竞争。今天的挑战是建造一个能在竞技场的一个洞周围导航的机器人。
竞技场是一个方格格,包括W列(从左到右编号从1到W)和H行(从上到下编号从1到H)。第x列和y行中的正方形表示(x,y).机器人从左上角开始(1,1),必须导航到右下角(W,H)。
方格的矩形子网格已被从网格中切割出来。更具体地说,所有的方块,是在矩形与左上角正方形(L,U)和右下角方格(R,D)都被移除。
杰玛没有太多的时间来编程她的机器人,所以它遵循一个非常简单的算法:如果机器人在最右边的列,它总是移动到它的正下方。否则,如果机器人在最底层的一排,它总是会直接移动到它的正方形上。否则,机器人会随机选择直接向右移动,或者以相同的概率向正下方移动。
杰玛通过挑战,如果她的机器人避免掉进洞,并使它的平方(W,H)。她通过挑战的可能性有多大?
输入
输入的第一行给出了测试用例的数量,T测试用例紧随其后。每个测试用例由一条包含W、H、L、U、R和D的单行组成。
输出
对于每个测试用例,输出一行包含用例#x: y的行,其中x是测试用例数(从1开始),y是0到1之间的实数,这是珍玛通过挑战的概率。
如果y在正确答案的10-5的绝对或相对误差范围内,它将被认为是正确的。有关这意味着什么以及我们所接受的实数格式的解释,请参见常见问题解答。
限制时限:
每套测试15秒。内存限制: 1GB。1≤T≤100。1≤U≤D≤H. 1≤L≤R≤W.左上角和右下角方格都不会丢失。
测试集1 1≤W≤300.1≤H≤300。
测试装置2 1≤W≤105。1≤H≤105.
这是我的代码:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int sets = scan.nextInt();
for(int q = 0; q < sets; q++){
int rows = scan.nextInt();
int cols = scan.nextInt();
double[][] board = new double[rows + 1][cols + 1];
int leftx = scan.nextInt();
int lefty = scan.nextInt();
int rightx = scan.nextInt();
int righty = scan.nextInt();
if((rightx == rows && righty == cols) || (leftx == 1 && rightx == 1)){
System.out.println("Case #" + (q + 1) + ": " + 0.0);
continue;
}
board[1][1] = 1;
for(int i = 1; i < rows; i++){
for(int j = 1; j < cols; j++){
if((i == rightx && j >= lefty && j <= righty) || (j == righty && i >= leftx && i <= rightx)){
continue;
}
board[i + 1][j] += board[i][j] / 2;
board[i][j + 1] += board[i][j] / 2;
}
}
for(int i = 1; i < rows; i++){
if(cols == righty && i >= leftx && i <= rightx){
continue;
}
board[i + 1][cols] += board[i][cols];
}
for(int i = 1; i < cols; i++){
if(rows == rightx && i >= lefty && i <= righty){
continue;
}
board[rows][i + 1] += board[rows][i];
}
System.out.printf("Case #%d: %.10f\n", q + 1, board[rows][cols]);
}
}
}谢谢!!
发布于 2020-08-27 16:45:45
这个问题要求找出概率,y是0到1之间的实数。您的代码计算通向右下角(一个整数)的安全路径数.毫无疑问,这是一个错误的答案。
https://stackoverflow.com/questions/63608863
复制相似问题