zoukankan      html  css  js  c++  java
  • P2827 蚯蚓

    P2827 蚯蚓

    思路:数据范围已经不能用堆模拟了。考虑先将 \(a_i\) 从大到小排序,将 \(a_i\) 依次放入队列q1,每次将砍掉后的第一段放入q2,第二段放入q3,则q1,q2,q3都单调递减。因此每次被砍的长度为q1,q2,q3队首的最大值。

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    const int inf=100000000007;
    const int N=100005;
    int n,m,q,u,v,t,a[N],d;
    queue<int>q1,q2,q3;
    bool cmp(const int &a,const int &b)
    {
        return a>b;
    }
    int max(int a,int b)
    {
        return a>b?a:b;
    }
    signed main()
    {
        scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&q,&u,&v,&t);
        for(int i=1;i<=n;++i)scanf("%lld",&a[i]);
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;++i)q1.push(a[i]);
        for(int i=1;i<=m;++i)
        {
            int mx=-inf;
            if(q1.size())mx=max(mx,q1.front());
            if(q2.size())mx=max(mx,q2.front());
            if(q3.size())mx=max(mx,q3.front());
            if(q1.size()&&q1.front()==mx)q1.pop();
            else if(q2.size()&&q2.front()==mx)q2.pop();
            else if(q3.size()&&q3.front()==mx)q3.pop();
            mx+=d;
            if(i%t==0)printf("%lld ",mx);
            d+=q;
            int len=mx*u/v;
            q2.push(len-d);
            q3.push(mx-len-d);
        }
        puts("");
        for(int i=1;i<=n+m;++i)
        {
            int mx=-inf;
            if(q1.size())mx=max(mx,q1.front());
            if(q2.size())mx=max(mx,q2.front());
            if(q3.size())mx=max(mx,q3.front());
            if(q1.size()&&q1.front()==mx)q1.pop();
            else if(q2.size()&&q2.front()==mx)q2.pop();
            else if(q3.size()&&q3.front()==mx)q3.pop();
            if(i%t==0)printf("%lld ",mx+d);
        }
        puts("");
        return 0;
    }
    
  • 相关阅读:
    2019年第九周作业
    2019年春第八周作业
    2019年春第七周作业
    2019春第六周作业
    2019年春季学期第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业 ----PTA作业
    2019年春季学期第三周作业
    2019春第七周作业
    第五周作业
  • 原文地址:https://www.cnblogs.com/zzctommy/p/12317198.html
Copyright © 2011-2022 走看看