首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gridland地铁HackerRank

Gridland地铁HackerRank
EN

Stack Overflow用户
提问于 2020-05-05 18:54:49
回答 2查看 506关注 0票数 1

我在解决问题 on hackerRank的问题。我已经浏览了整个讨论部分,尝试了所有建议的测试用例,并取得了预期的结果。我想我可能做了一些愚蠢的代码错误,因为我确信我已经考虑过/考虑了实现中的每一个场景。如果我的代码有错误,请你帮我指出一下好吗?

代码语言:javascript
复制
public static void main(String[] args) throws IOException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    String strNum[] = bf.readLine().split("\\s");
    double n = Double.parseDouble(strNum[0]);
    double m = Double.parseDouble(strNum[1]);
    double k = Double.parseDouble(strNum[2]);

    Map<Double, TreeMap<Double, Double>> map = new HashMap<>();
    while (k > 0) {
        strNum = bf.readLine().split("\\s");
        double r = Double.parseDouble(strNum[0]);
        double c1 = Double.parseDouble(strNum[1]);
        double c2 = Double.parseDouble(strNum[2]);
        TreeMap<Double, Double> innerMap = map.get(r);
        if (innerMap != null) {
            Double x = innerMap.get(c1);
            if (x != null) {
                if (c2 > x) {
                    innerMap.put(c1, c2);
                }
            } else {
                innerMap.put(c1, c2);
            }
        } else {
            innerMap = new TreeMap<Double, Double>();
            innerMap.put(c1, c2);
            map.put(r, innerMap);
        }
        k--;
    }
    double count = (n - map.size()) * m;
    for (Map.Entry<Double, TreeMap<Double, Double>> e : map.entrySet()) {
        TreeMap<Double, Double> innerMap = e.getValue();
        double start = innerMap.firstKey();
        double end = innerMap.firstEntry().getValue();
        for (Map.Entry<Double, Double> e2 : innerMap.entrySet()) {
            double x = e2.getKey();
            double y = e2.getValue();
            if (y > end) {
                if (x > end) {
                    count += ((x - end) - 1);
                }
                end = y;
            }
        }
        count += (m - (end - start + 1));
    }
    System.out.println(String.format("%.0f", count));
}

24/31测试用例失败了。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-09 13:58:01

@fpezzini有一个关于双倍的观点:在输入上

代码语言:javascript
复制
1000000000 1000000000 1
1 1 1

您的代码打印的是1000000000000000000,而不是999999999999999999,因为后者不能表示为double。

票数 1
EN

Stack Overflow用户

发布于 2020-05-08 17:01:53

如果您的代码读取r,c1,c2,然后是带有c2'<c2r,c1,c2',它将悄悄地删除前一条轨道。

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

https://stackoverflow.com/questions/61620843

复制
相关文章

相似问题

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