1 条题解

  • 1
    @ 2024-5-17 17:34:52

    题目大意: 1~n 每个点上各有一只青蛙,每次它们会跳到距离自己第 k 远的点上。求跳 m 次之后,每只青蛙的位置

    思路

    第一步,预处理出每个点上的青蛙跳一次之后的位置,可以用双指针来求

    第二步,用倍增处理出第 i 个点上的青蛙跳 2^j 次之后的位置

    第三步,利用第二步算出的结果,计算每只青蛙跳 m 次之后的位置

    参考代码
        int l = 1, r = 1 + k;  //双指针求跳一次的位置
        for (int i = 1; i <= n; ++i)
        {
            while(r < n && abs(p[l] - p[i]) > abs(p[r+1] - p[i]))
                r++;
            if(abs(p[l] - p[i]) < abs(p[r] - p[i]))
                f[i][0] = r;
            else
                f[i][0] = l;
        }
    
    • 1

    信息

    ID
    741
    时间
    2000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    77
    已通过
    15
    上传者