当前位置: 首页 > article >正文

蓝桥杯每日一真题——[蓝桥杯 2021 省 AB2] 负载均衡(优先队列,模拟)

文章目录

  • [蓝桥杯 2021 省 AB2] 负载均衡
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
      • 思路
      • 全部代码:

[蓝桥杯 2021 省 AB2] 负载均衡

题目描述

n n n 台计算机,第 i i i 台计算机的运算能力为 v i v_{i} vi

有一系列的任务被指派到各个计算机上,第 i i i 个任务在 a i a_{i} ai 时刻分配,指定计算机编号为 b i b_{i} bi, 耗时为 c i c_{i} ci 且算力消耗为 d i d_{i} di。如果此任务成功分配,将立刻开始运行, 期间持续占用 b i b_{i} bi 号计算机 d i d_{i} di 的算力, 持续 c i c_{i} ci 秒。

对于每次任务分配,如果计算机剩余的运算能力不足则输出 − 1 -1 1,并取消这次分配,否则输出分配完这个任务后这台计算机的剩余运算能力。

输入格式

输入的第一行包含两个整数 n , m n, m n,m,分别表示计算机数目和要分配的任务数。

第二行包含 n n n 个整数 v 1 , v 2 , ⋯ v n v_{1}, v_{2}, \cdots v_{n} v1,v2,vn,分别表示每个计算机的运算能力。

接下来 m m m 行每行 4 4 4 个整数 a i , b i , c i , d i a_{i}, b_{i}, c_{i}, d_{i} ai,bi,ci,di,意义如上所述。数据保证 a i a_{i} ai 严格递增,即 a i < a i + 1 a_{i}<a_{i+1} ai<ai+1

输出格式

输出 m m m 行,每行包含一个数,对应每次任务分配的结果。

样例 #1

样例输入 #1

2 6
5 5
1 1 5 3
2 2 2 6
3 1 2 3
4 1 6 1
5 1 3 3
6 1 3 4

样例输出 #1

2
-1
-1
1
-1
0

提示

【样例说明】

时刻 1 1 1,第 1 1 1 个任务被分配到第 1 1 1 台计算机,耗时为 5 5 5,这个任务时刻 6 6 6 会结束, 占用计算机 1 1 1 的算力 3 3 3

时刻 2 2 2,第 2 2 2 个任务需要的算力不足,所以分配失败了。

时刻 3 3 3,第 1 1 1 个计算机仍然正在计算第 1 1 1 个任务,剩余算力不足 3 3 3,所以失败。

时刻 4 4 4,第 1 1 1 个计算机仍然正在计算第 1 1 1 个任务,但剩余算力足够,分配后剩余算力 1 1 1

时刻 5 5 5,第 1 1 1 个计算机仍然正在计算第 1 1 1 4 4 4 个任务,剩余算力不足 4 4 4,失败。

时刻 6 6 6,第 1 1 1 个计算机仍然正在计算第 4 4 4 个任务,剩余算力足够,且恰好用完。

【评测用例规模与约定】

对于 20 % 20 \% 20% 的评测用例, n , m ≤ 200 n, m \leq 200 n,m200

对于 40 % 40 \% 40% 的评测用例, n , m ≤ 2000 n, m \leq 2000 n,m2000

对于所有评测用例, 1 ≤ n , m ≤ 2 × 1 0 5 , 1 ≤ a i , c i , d i , v i ≤ 1 0 9 , 1 ≤ b i ≤ n 1 \leq n, m \leq 2\times 10^5,1 \leq a_{i}, c_{i}, d_{i}, v_{i} \leq 10^{9}, 1 \leq b_{i} \leq n 1n,m2×105,1ai,ci,di,vi109,1bin

蓝桥杯 2021 第二轮省赛 A 组 H 题(B 组 I 题)。


思路

呀呀呀,任务写成进程了呀呀呀呀学操作系统学傻了

  1. 有n个计算机,有算力,如果算力足够可以直接加入计算机中,如果算力不够就不行,这就要求我们实时的更新在这个计算机中的进程,把已经计算完的进程及时的退出,那就要求我们要知道在每个计算机中结束时间最早的是哪一个进程,然后将他弹出,所以可以使用小根堆来代表计算机储存每个进程。
  2. 这个进程有用的信息就是,结束时间和算力消耗,每个进程的使用的编号可以用数组编号对应所以可以用pair数组来存,当然也可以用结构体来存。
  3. 实时的模拟进程就完事了,没有别的什么的需要注意的。

全部代码:

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

const int N = 2e5 + 10;
int n, m;
int s[N];
// pair<结束时间,消耗算力>                                                         // 存储计算机的当前算力
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q[N]; // 小根堆 pair先比较第一个,第一个相同比较第二个

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> s[i]; // 运算能力
    while (m--)
    {
        int a, b, c, d;
        cin >> a >> b >> c >> d; // 分配时刻,计算机编号,耗时,算力消耗
        // 维护
        while (q[b].size() && q[b].top().first <= a) // 最小的右端点小于算完了
        {
            s[b] += q[b].top().second; // 结束运算上一个任务,返回算力
            q[b].pop();                // 弹出上一个任务
        }
        if (s[b] < d)
            printf("-1\n"); // 算力不够
        else
        {
            q[b].push({a + c, d}); // 将新的任务加入
            s[b] -= d;
            printf("%d\n", s[b]);
        }
    }
    return 0;
}


http://www.kler.cn/a/4023.html

相关文章:

  • Armv8/Armv9架构从入门到精通-介绍
  • 深度学习:大模型Decoding+MindSpore NLP分布式推理详解
  • HBase实训:纸币冠字号查询任务
  • 128.最长连续序列
  • LARGE LANGUAGE MODELS ARE HUMAN-LEVEL PROMPT ENGINEERS
  • 32单片机综合应用案例——物联网(IoT)环境监测站(四)(内附详细代码讲解!!!)
  • 自动指出测试问题,TestGPT来袭,测试工程师,你准备好了么
  • ShowMeAI周刊 | AI独立开发者:帆船旅行但月入万刀;创业吧!新黄金时代来了;资本看好哪些创业方向;被AI震麻的一周again
  • 线程基础知识总结
  • 18个基础命令教你轻松拿捏华为设备的各种状态!-HCIA HCIP
  • leetcode 搜索插入位置(35)
  • GPS时间序列分析---剔除跳跃点,拟合时间序列
  • 基于springboot心理健康管理系统(程序+数据库+文档)014
  • 位置编码Positional Encoding
  • 3D Slicer学习记录(6)-使用PLUSapp连接WebCam并实现marker跟踪
  • Json基本语法
  • 编程题 进制转换(Java实现)
  • Mybatis配置之别名(typeAliases)优化、设置(settings)优化、映射器(mappers)优化以及生命周期和作用域的学习和理解
  • C#,码海拾贝(02)——复数Complex计算类,《C#数值计算算法编程》源代码升级改进版
  • 初识冯诺依曼体系结构
  • #详细介绍!!! 线程池的拒绝策略(经典面试题)
  • 【精彩点评】比特币如何颠覆和改善全球供应链体系并彻底改变行业现状
  • 【SpringBoot】| 邮箱发送验证码,你会了吗?
  • ChatGPT相关核心算法
  • AutoSAR COMM-通信管理器通信通道ID【ComMChannelId】的定义
  • 【lwIP(第四章)】网络接口