zoukankan      html  css  js  c++  java
  • VK Cup 2016

    D. Running with Obstacles

    题目连接:

    http://www.codeforces.com/contest/637/problem/D

    Description

    A sportsman starts from point xstart = 0 and runs to point with coordinate xfinish = m (on a straight line). Also, the sportsman can jump — to jump, he should first take a run of length of not less than s meters (in this case for these s meters his path should have no obstacles), and after that he can jump over a length of not more than d meters. Running and jumping is permitted only in the direction from left to right. He can start andfinish a jump only at the points with integer coordinates in which there are no obstacles. To overcome some obstacle, it is necessary to land at a point which is strictly to the right of this obstacle.

    On the way of an athlete are n obstacles at coordinates x1, x2, ..., xn. He cannot go over the obstacles, he can only jump over them. Your task is to determine whether the athlete will be able to get to the finish point.

    Input

    The first line of the input containsd four integers n, m, s and d (1 ≤ n ≤ 200 000, 2 ≤ m ≤ 109, 1 ≤ s, d ≤ 109) — the number of obstacles on the runner's way, the coordinate of the finishing point, the length of running before the jump and the maximum length of the jump, correspondingly.

    The second line contains a sequence of n integers a1, a2, ..., an (1 ≤ ai ≤ m - 1) — the coordinates of the obstacles. It is guaranteed that the starting and finishing point have no obstacles, also no point can have more than one obstacle, The coordinates of the obstacles are given in an arbitrary order.

    Output

    If the runner cannot reach the finishing point, print in the first line of the output "IMPOSSIBLE" (without the quotes).

    If the athlete can get from start to finish, print any way to do this in the following format:

    print a line of form "RUN X>" (where "X" should be a positive integer), if the athlete should run for "X" more meters;
    print a line of form "JUMP Y" (where "Y" should be a positive integer), if the sportsman starts a jump and should remain in air for "Y" more meters.
    All commands "RUN" and "JUMP" should strictly alternate, starting with "RUN", besides, they should be printed chronologically. It is not allowed to jump over the finishing point but it is allowed to land there after a jump. The athlete should stop as soon as he reaches finish.

    Sample Input

    3 10 1 3
    3 4 7

    Sample Output

    RUN 2
    JUMP 3
    RUN 1
    JUMP 2
    RUN 2

    Hint

    题意

    有一个m长的跑道,上面有n个障碍

    你每次跳最多跳d米,然后每次跳之前,需要至少跑s米

    让你输出一种方案,使得这个人能够跑完全程。

    题解:

    直接贪心就好了。

    肯定跑的多,跳的少最好。

    能跳就跳,如果不满足跳的需求,就考虑下一个。

    注意一下一次跳过两个栏杆这种情况

    注意最后一个栏杆之后就是终点的情况。

    然后就没了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 4e5+7;
    int a[maxn],n,m,s,d,flag[maxn],dis[maxn],tot;
    
    bool solve()
    {
        if(a[1]<=s)return false;
        int now = a[1]-1;
        flag[tot]=0,dis[tot]=now,tot++;
        for(int i=1;i<n;i++)
        {
            if(a[i+1]-a[i]<=s+1)continue;
            if(a[i]+1-now>d)return false;
            flag[tot]=1,dis[tot]=a[i]+1-now,tot++;
            flag[tot]=0,dis[tot]=a[i+1]-a[i]-2,tot++;
            now=a[i+1]-1;
        }
        if(a[n]+1-now>d)return false;
        flag[tot]=1,dis[tot]=a[n]+1-now,tot++;
        if(a[n]+1!=m)
            flag[tot]=0,dis[tot]=m-a[n]-1,tot++;
        for(int i=0;i<tot;i++)
        {
            if(flag[i])printf("JUMP ");
            else printf("RUN ");
            printf("%d
    ",dis[i]);
        }
        return true;
    }
    int main()
    {
        scanf("%d%d%d%d",&n,&m,&s,&d);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+1+n);
        if(!solve())return puts("IMPOSSIBLE"),0;
    }
  • 相关阅读:
    使用jQuery插件时避免重复引入jquery.js文件
    读书笔记《集体智慧编程》Chapter 2 : Make Recommendations
    数据挖掘学习07 《数据挖掘导论》第二章:数据
    推荐2款在线Ascii画图工具
    数据挖掘学习08 实验:使用R评估kmeans聚类的最优K
    数据挖掘学习05 使用R对文本进行hierarchical cluster并验证结果
    Apache alias目录配置
    数据挖掘学习06 《数据挖掘导论》导读
    Unix网络编程 3rd vol1 读书笔记
    关于Xcode
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5292805.html
Copyright © 2011-2022 走看看