• [dp][前缀和][并查集] 洛谷 P3575 DOO-Around the world


    题目描述

    After trying hard for many years, Byteasar has finally received a pilot license.

    To celebrate the fact, he intends to buy himself an airplane and fly around the planet 3-SATurn (as you may have guessed, this is the planet on which Byteotia is located).

    Specifically, Byteasar plans to fly along the equator.

    Unfortunately, the equator is rather long, necessitating refuels.

    The flight range (on full tank) of each aircraft is known.

    There is a number of airports along the equator, and a plane can be refueled when it lands on one.

    Since buying an airplane is a big decision, Byteasar asks your help.

    He is about to present you with a list of different plane models he is considering.

    Naturally, these differ in their flight range.

    For each plane model, he would like to know the minimum number of landings (including the final one) he would have to make in order to complete the journey.

    Note that for each airplane model, the journey may start at a different airport.

    通过几年的努力,Byteasar最终拿到了飞行员驾驶证。为了庆祝这一事实,他打算买一架飞机并且绕Byteotia星球赤道飞行一圈。但不幸的是赤道非常长所以需要中途加几次油。现在已知赤道上面所有飞机场,所有飞机从飞机场起飞降落也可以加油。因为买飞机是个十分重大的决定,Byteasar决定寻求你的帮助。他将会让你模拟不同的飞行路线。自然这些飞机一次能走的航程是不同的。对于每次模拟,他想要知道最少需要降落多少次(包括最后一次)。需要注意的是起点可以任意选取。

    输入输出格式

    输入格式:

    The first line of the standard input contains two integers nn and ss (2le nle 1 000 0002n1 000 000, 1le sle 1001s100),separated by a single space, denoting the number of airports along the equator and the number of airplane models Byteasar is considering.

    The second line contains nn positive integers l_1,l_2,cdots,l_nl1,l2,,ln (l_1+l_2+cdots+l_nle 10^9l1+l2++ln109), separated by single spaces, specifying the distances between successive airports along the equator.

    The number l_ili is the distance between the ii-th and (i+1)(i+1)-st (or nn-th and first if i=ni=n) in kilometers.

    The third line contains ss integers d_1,d_2,cdots,d_sd1,d2,,ds (1le d_ile l_1+l_2+cdots+l_n1dil1+l2++ln), separated by single spaces. The number d_idi is the ii-th airplane model's flight range in kilometers, i.e., the maximum distance it can fly before landing and refueling.

    输出格式:

    Your program should print ss lines to the standard output: the ii-th of these should contain a single integer, namely, the minimum lumber of flight segments (and thus also landings) necessary to fly the ii-th airplane around the planet 3-SATurn along the equator, starting at an airport of choice, or the word NIE (Polish for no) if it is impossible to complete the journey with this airplane.

    输入输出样例

    输入样例#1:
    6 4
    2 2 1 3 3 1
    3 2 4 11
    
    输出样例#1:
    4
    NIE
    3
    2

    题解

    • 首先,我们可以把环破开,将链增长一倍,求出前缀和
    • 对于每个询问,设油量为d

    • 先预处理出每个点走一次最多走到哪,这个用尺取法可以O(n)

    • 然后得到一颗树,算一下每个点的深度,枚举起点,在树上一直向上爬,直到距离超过n,爬的过程同时用并查集合并,可以用dp来记录答案

    代码

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #define N 2000010
     5 using namespace std;
     6 int n,m,mx,x,fa[N],sum[N],f[N];
     7 int main()
     8 {
     9     scanf("%d%d",&n,&m);
    10     for (int i=1,x;i<=n;i++) scanf("%d",&x),fa[i]=i,mx=max(mx,x),sum[i]=sum[i-1]+x;
    11     for (int i=n+1;i<=n+n;i++) sum[i]=sum[i-1]+sum[i-n]-sum[i-n-1];
    12     while (m--)
    13     {
    14         scanf("%d",&x);
    15         if (x<mx) { printf("NIE
    "); continue; }
    16         for (int i=n+1,j=1;;i++)
    17         {
    18             while (sum[i]-sum[j]>x) j++;
    19             f[i]=f[j]+1,fa[i]=fa[j];
    20             if (i-fa[i]>=n) { printf("%d
    ",f[i]); break; }
    21         }
    22     }
    23 }
  • 相关阅读:
    Win32K里的死循环
    Oracle 经常使用命令小结
    ImageView 会盖掉ScrollView的OnTouchListener,监听Activity的手势
    怎样安装pip--python的包管理工具
    设计模式-模板方法
    django中怎样生成非HTML格式的内容。
    SharePoint 2013 设置自己定义布局页
    Android读写JSON格式的数据之JsonWriter和JsonReader
    基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)
    BZOJ-1923-外星千足虫-SDOI2010
  • 原文地址:https://www.cnblogs.com/Comfortable/p/10340456.html
Copyright © 2020-2023  润新知