• Codeforces 637D 模拟


    题目:Codeforces 637D
    题意:
    有个人从0点走到m点,中间点会有障碍,他必须跨过去,但是在跨之前,必须跑一段距离,至少是s,然后他就可以跨越不大于d的距离,给出障碍点,问他能不能走到最后。
    分析:
    这场的题目叙述好难理解,这题我已开始读错题了,一位每个障碍是一段距离,WA了好几次,后来一读原来是点,晕~~ 后来改了一下就A了。简单说一下思路:因为有的障碍物之间的距离太小,所以不可以助跑,先预处理一遍,分别把可以直接跨越的和不可以直接跨越的标记一下。然后在从头开始扫一遍,因为一定是跑跳跑跳…的结构,所以每次都把跑跳的距离计算一下,放了容器里保存一下,中间判断一下是否会有的距离太大超过可以跨越的距离。最后输出结果就好。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=200005;
    typedef pair<int,int>pii;
    int a[N];
    bool vis[N];
    int main()
    {
        int n,m,s,d;
        //freopen("f.txt","r",stdin);
        scanf("%d%d%d%d",&n,&m,&s,&d);
        for(int i=0;i<n;i++)scanf("%d",&a[i]);
        a[n]=0;a[n+1]=m;
        sort(a,a+n+2);
        for(int i=2;i<=n+1;i++){
            if(a[i]-a[i-1]-2>=s){
                vis[i]=1;
            }
        }
        if(d<2){
             printf("IMPOSSIBLE
    ");return 0;
        }
        if(a[1]-1>=s)vis[1]=1;
        else{
             printf("IMPOSSIBLE
    ");return 0;
        }
        vector<pii>p;int cnt=0;
        for(int i=1;i<=n;i++){
            if(vis[i]){
                p.push_back(pii(1,a[i]-cnt-1));
                int j=i+1;
                while(!vis[j]&&j<=n)j++;
                if(j==i+1){
                    p.push_back(pii(2,2));cnt=a[i]+1;continue;
                }
                int dd=a[j-1]-a[i]+2;
                if(dd>d){
                    printf("IMPOSSIBLE
    ");return 0;
                }
                p.push_back(pii(2,dd));
                i=j-1;
                cnt=a[j-1]+1;
            }
        }
        if(m-a[n]-1>0)p.push_back(pii(1,m-a[n]-1));
        for(int i=0;i<p.size();i++){
            if(p[i].first==1){
                printf("RUN %d
    ",p[i].second);
            }
            else{
                printf("JUMP %d
    ",p[i].second);
            }
        }
        return 0;
    }
  • 相关阅读:
    gobject对象不宜作为动态加载的插件
    用内存管理器的钩子函数跟踪内存泄漏
    DBUS与多线程
    broncho小组放假半天为中国奥运加油
    多进程DirectFB用X11显示的死锁问题
    佛诞节快乐
    R语言中substr函数,字符串截取函数
    R语言中while循环
    R语言中求分位数
    R语言中利用sapply函数提取列表中元素
  • 原文地址:https://www.cnblogs.com/01world/p/5651246.html
Copyright © 2020-2023  润新知