首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流浪机器人-在Kickstart获得WA

流浪机器人-在Kickstart获得WA
EN

Stack Overflow用户
提问于 2020-08-27 03:47:30
回答 1查看 97关注 0票数 1

我试图写一个简短的解决方案的谷歌启动问题在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.

这是我的代码:

代码语言:javascript
复制
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]);
        }
    }
}

谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2020-08-27 16:45:45

这个问题要求找出概率,y是0到1之间的实数。您的代码计算通向右下角(一个整数)的安全路径数.毫无疑问,这是一个错误的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63608863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档