备战蓝桥杯---数据结构与STL应用(入门1)

话不多说,直接看题:

下面为分析:显然,我们要先合并最小的两堆(因为他们在后边也得被计算,换句话,我们独立的看,某一堆的体力值为他自己重量*从现在到最后的次数)

因此,我们可以用两个队列来做。下面我用图来描述过程:(其实可以直接优先队列)

下面为AC代码:

接题(比较难):

这个题跟上一个有异曲同工之妙,我们可以用3个队列来维护最大长度(用优先队列会超),同时,有个十分巧妙地点,对于某个过程产生的蚯蚓,我们让他们-前面时间增加的长度,这样统一了基准,巧妙地把某个过程产生的蚯蚓化为一开始就产生的。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,q,u,v,t,a[100010],ck;
bool cmp(int a,int b){
    return a>b;
}
signed main(){
    scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    sort(a+1,a+n+1,cmp);
    queue<int> q1;
    queue<int> q2;
    queue<int> q3;
    for(int i=1;i<=n;i++){
        q1.push(a[i]);
    }
    for(int i=1;i<=m;i++){
        int max1,a1=-0x7f7f7f7f,a2=-0x7f7f7f7f,a3=-0x7f7f7f7f;
        if(!q1.empty()) a1=q1.front();
        if(!q2.empty()) a2=q2.front();
        if(!q3.empty()) a3=q3.front();
        max1=max(a1,max(a2,a3));
        if(max1==a1) q1.pop();
        else if(max1==a2) q2.pop();
        else q3.pop();
        max1+=(i-1)*q;
        if(i%t==0) cout<<max1<<" ";
        q2.push(max1*u/v-(i)*q);
        q3.push(max1-max1*u/v-(i)*q); 
    }
    cout<<endl;
    while(!q1.empty()&&!q2.empty()&&!q3.empty()){
        int a1=q1.front(),a2=q2.front(),a3=q3.front();
        if(a1>=max(a2,a3)){
            q1.pop();
            ck++;
            if(ck%t==0) cout<<a1+q*m<<" ";
            continue;
        }
        if(a2>=max(a1,a3)){
            q2.pop();
            ck++;
            if(ck%t==0) cout<<a2+q*m<<" ";
            continue;
        }
        if(a3>=max(a2,a1)){
            q3.pop();
            ck++;
            if(ck%t==0) cout<<a3+q*m<<" ";
            continue;
        }
    }
    if(q1.empty()){
        while(!q2.empty()&&!q3.empty()){
            if(q2.front()>q3.front()){
                ck++;
                if(ck%t==0)cout<<q2.front()+q*m<<" ";
                q2.pop();
            }
            else{ck++;
                if(ck%t==0)cout<<q3.front()+q*m<<" ";
                q3.pop();
            }
        }
        while(!q2.empty()&&q3.empty()){
            ck++;
            if(ck%t==0)cout<<q2.front()+q*m<<" ";
            q2.pop();
        }
        while(!q3.empty()&&q2.empty()){
            ck++;
           if(ck%t==0) cout<<q3.front()+q*m<<" ";
            q3.pop();
        }
        return 0;
    }
     if(q2.empty()){
        while(!q1.empty()&&!q3.empty()){
            if(q1.front()>q3.front()){
                ck++;
               if(ck%t==0) cout<<q1.front()+q*m<<" ";
                q1.pop();
            }
            else{ck++;
            if(ck%t==0) cout<<q3.front()+q*m<<" ";
                q3.pop();
            }
        }
        while(!q1.empty()&&q3.empty()){
            ck++;
           if(ck%t==0) cout<<q1.front()+q*m<<" ";
            q1.pop();
        }
        while(!q3.empty()&&q1.empty()){
            ck++;
           if(ck%t==0) cout<<q3.front()+q*m<<" ";
            q3.pop();
        }
        return 0;
    }
     if(q3.empty()){
        while(!q2.empty()&&!q1.empty()){
            if(q2.front()>q1.front()){
                ck++;
               if(ck%t==0) cout<<q2.front()+q*m<<" ";
                q2.pop();
            }
            else{ck++;
               if(ck%t==0) cout<<q1.front()+q*m<<" ";
                q1.pop();
            }
        }
        while(!q2.empty()&&q1.empty()){
            ck++;
           if(ck%t==0) cout<<q2.front()+q*m<<" ";
            q2.pop();
        }
        while(!q1.empty()&&q2.empty()){
            ck++;
          if(ck%t==0) cout<<q1.front()+q*m<<" ";
            q1.pop();
        }
    }
}
相关推荐
振鹏Dong9 分钟前
字符串——面试考察高频算法题
java·数据结构·算法
longlong int1 小时前
【每日算法】Day 17-1:位图(Bitmap)——十亿级数据去重与快速检索的终极方案(C++实现)
开发语言·c++·算法
泛舟起晶浪1 小时前
大衣的旅行--前缀和+二分
数据结构·算法
myloveasuka1 小时前
[Linux]进程与PCB的关系,进程的基本操作
linux·c语言·c++
Run_Teenage2 小时前
C语言 数据结构【双向链表】动态模拟实现
c语言·数据结构·链表
歪~~2 小时前
KMP算法
数据结构·c++·算法
黑不拉几的小白兔2 小时前
第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组题目试做(中)【本期题目:回文数组,挖矿】
c语言·python·蓝桥杯
夏天的阳光吖3 小时前
C++蓝桥杯实训篇(二)
开发语言·c++·蓝桥杯
梁下轻语的秋缘3 小时前
每日c/c++题 备战蓝桥杯(小球反弹)[运动分解求解,最大公约数gcd]
c语言·c++·学习·算法·数学建模·蓝桥杯
SiMmming3 小时前
【算法竞赛】状态压缩型背包问题经典应用(蓝桥杯2019A4分糖果)
c++·经验分享·算法·职场和发展·蓝桥杯·动态规划