麻烦bobo老师帮我看下

麻烦bobo老师帮我看下

问题描述:

这个是学校内部的一个题目,没办法放链接,问题在于有两个用例显示我超时了(没办法看具体是在什么用例上超时了),您能帮我看下如何优化嘛

https://img1.sycdn.imooc.com//climg/61b4866c09df6da715070802.jpg

https://img1.sycdn.imooc.com//climg/61b486920933e9cd15450276.jpg

相关代码:

import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public int getTime(int all, int distance, int from, int to){
      if(distance == 1){
            return to - from;
        }
        HashMap<Integer, Integer> map = new HashMap<>();
        int temp = from, count = 1;
        while (!map.containsKey((temp + distance) % all) && !map.containsKey(to)){
            map.put((temp + distance) % all ,count);
            temp = (temp + distance) % all;
            count ++;
        }
        if(map.containsKey(to)){
            return map.get(to);
        }else{
            return -1;
        }
    }

    public static void main(String[] args){
        Main Main = new Main();
        Scanner scanner = new Scanner(System.in);
        int time = scanner.nextInt();
        int[] res = new int[time];
        for(int i = 0; i < time; i ++){
            int all = scanner.nextInt();
            int distance = scanner.nextInt();
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            res[i] = Main.getTime(all, distance, x, y);
        }
        for(int i = 0; i < time; i ++){
            if(res[i] != -1 ){
                System.out.println(res[i]);
            }else{
                System.out.println("Impossible");
            }
        }
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
liuyubobobo 2021-12-11 19:17:54

没有数据范围,我不能判断是否模拟可以通过,如果模拟不能通过的话,只能用数学方法解。


问题相当于求解 (x + td) % n == y 的 t,


即 td % n = (y - x + n) % n


这是一个线性同余方程,可以在网上搜一下这个关键字,查一下这个方程这么解。


想详细系统了解这个领域,应该学习数论。


继续加油!:)

  • 提问者 慕数据4371709 #1

    嘿嘿,bobo老师麻烦你帮我先写下让我看看,我刚刚去搜了那个方程有点看不大懂。。。

    2021-12-11 19:46:40
  • liuyubobobo 回复 提问者 慕数据4371709 #2

    1)对于一个数学问题,如果你看不懂推导过程,看到代码也没有用。代码是思路的体现,我已经告诉了你问题的涉及的具体知识点甚至是背后的领域是什么。如果你真的要想搞明白,只能自己去啃,没有捷径,我给你一个代码,你不会恍然大悟。


    2)如果你真要代码,网上一搜到处都是。比如这里:https://oi-wiki.org/math/number-theory/linear-equation/ 


    你的这个问题和这个问题类似(其实你的问题更简单一些),可以参考: https://pianshen.com/article/5631512455/ 


    3)这是一个答疑区,是解答疑问的,尤其是课程内容相关疑问的,而不是解题区。我无法做到同学贴一个算法题上来,我就写代码。这里不是代码索要区,是问答区。请谅解。

    2021-12-12 02:06:58
  • 提问者 慕数据4371709 回复 liuyubobobo #3

    哦哦哦,谢谢bobo老师,我现在弄明白这个了,谢谢

    2021-12-12 10:15:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师