• 6463: Tak and Hotels II


    6463: Tak and Hotels II

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 95  解决: 29
    [提交][状态][讨论版][命题人:admin]

    题目描述

    N hotels are located on a straight line. The coordinate of the i-th hotel (1≤i≤N) is xi.
    Tak the traveler has the following two personal principles:
    He never travels a distance of more than L in a single day.
    He never sleeps in the open. That is, he must stay at a hotel at the end of a day.
    You are given Q queries. The j-th (1≤j≤Q) query is described by two distinct integers aj and bj. For each query, find the minimum number of days that Tak needs to travel from the aj-th hotel to the bj-th hotel following his principles. It is guaranteed that he can always travel from the aj-th hotel to the bj-th hotel, in any given input.

    Constraints
    2≤N≤105
    1≤L≤109
    1≤Q≤105
    1≤xi<x2<…<xN≤109
    xi+1−xi≤L
    1≤aj,bj≤N
    aj≠bj
    N,L,Q,xi,aj,bj are integers.
    Partial Score
    200 points will be awarded for passing the test set satisfying N≤103 and Q≤103.

    输入

    The input is given from Standard Input in the following format:
    N
    x1 x2 … xN
    L
    Q
    a1 b1
    a2 b2
    :
    aQ bQ

    输出

    Print Q lines. The j-th line (1≤j≤Q) should contain the minimum number of days that Tak needs to travel from the aj-th hotel to the bj-th hotel.

    样例输入

    9
    1 3 6 13 15 18 19 29 31
    10
    4
    1 8
    7 3
    6 7
    8 5
    

    样例输出

    4
    2
    1
    2
    

    提示

    For the 1-st query, he can travel from the 1-st hotel to the 8-th hotel in 4 days, as follows:
    Day 1: Travel from the 1-st hotel to the 2-nd hotel. The distance traveled is 2.
    Day 2: Travel from the 2-nd hotel to the 4-th hotel. The distance traveled is 10.
    Day 3: Travel from the 4-th hotel to the 7-th hotel. The distance traveled is 6.
    Day 4: Travel from the 7-th hotel to the 8-th hotel. The distance traveled is 10.

    来源

    ABC044&ARC060


     题意:

    给 n 个点 , 一天最大的移动距离,要求每天结束时必须在点上,求从A点到B点的最小天数。


    思路:

    f[x][y] 表示第x个点第2^y天能到达的最远点,二分处理 f[i][0],  那么 f[i][j] = f[f[i][j-1]][j-1](这里,因为j 表示 2的次方数, 所以第i个点 第 2^j 天能到达的最远点为  该点前 2^(j-1) 天能到达的最远点 经过 2^(j-1)天能到的最远点)。

    记录一个从A 开始的 cur 值, 找到小于B的第一个值,改变 cur 值。


    代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+10;
    int n,a,b,p[maxn],l,Q;
    int f[maxn][35];
    int main(){
        scanf("%d",&n);
        for (int i=1; i<=n; i++) scanf("%d",&p[i]);
        scanf("%d",&l);
        for (int i=1;i<=n;i++){
            int idx=upper_bound(p+1,p+1+n,p[i]+l)-p-1;
            if(p[i]+l>=p[n]) f[i][0]=n;
            else f[i][0]=idx;
        }
        for (int j=1; j<=30; j++)
            for (int i=1;i<=n;i++)
                f[i][j]=f[f[i][j-1]][j-1];
        scanf("%d",&Q);
        while(Q--){
            scanf("%d%d",&a,&b);
            if(a>b) swap(a,b);
            int cur=a,ans=0;
            for (int i=30; i>=0; i--){
                if(f[cur][i]<b){
                    ans+=(1<<i);
                    cur = f[cur][i];
                }
            }
            printf("%d
    ",ans+1);
        }
        return 0;
    }
    

  • 相关阅读:
    在IDEA上本地更新同步Git中的更改
    protobuf的序列化和反序列化
    关于Pytorch报警告:Warning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead
    990. 等式方程的可满足性
    死锁
    事务隔离
    Lab-1
    软件测试homework3
    TCP/UDP网络连接的固定写法
    软件测试Homework 2
  • 原文地址:https://www.cnblogs.com/acerkoo/p/9490323.html
Copyright © 2020-2023  润新知