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;
    }
    
  • 相关阅读:
    笔记。------数组
    图片与文字的对齐方式
    clear:both;和overflow:hidden;的应用理解。
    淘宝首页
    错误:编码GBK的不可映射字符
    Java基础之反射
    (一)Servlet简介
    Windows10快捷键
    (二)Maven的安装与环境配置
    (一)Maven简介
  • 原文地址:https://www.cnblogs.com/zzctommy/p/12317198.html
Copyright © 2011-2022 走看看