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

2024-05-30 03:52
文章标签 负载 蓝桥 2021 均衡 ab2

本文主要是介绍[蓝桥杯 2021 省 AB2] 负载均衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.题目

题目描述

n 台计算机,第 i 台计算机的运算能力为 v i v_i vi

有一系列的任务被指派到各个计算机上,第 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,并取消这次分配,否则输出分配完这个任务后这台计算机的剩余运算能力。

输入格式

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

第二行包含 n 个整数 v 1 , v 2 , ⋅ ⋅ ⋅ v n v_1,v_2,⋅⋅⋅v_n v1,v2,vn,分别表示每个计算机的运算能力。

接下来 m 行每行 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 ai < a i a_i ai + 1

输出格式

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

数据范围

对于 20% 的评测用例,n,m ≤ 200
对于 40% 的评测用例,n,m ≤ 2000
对于所有评测用例,1 ≤ n, m ≤ 200000,1 ≤ a i , c i , d i , v i a_i,c_i,d_i,v_i ai,ci,di,vi 1 0 9 10^9 109,1 ≤ b i b_i bi ≤ n

输入样例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 台计算机,耗时为 5,这个任务时刻 6 会结束,占用计算机 1 的算力 3

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

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

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

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

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

二.解释

看完题目,一开始以为是用多种限制条件的 DP,后来看到输入任务是按照时间一个递增才发现是贪心

直接模拟计算机执行过程就行,我们可以用一个小顶堆数组来保存某台计算机所有正在执行的任务的结束时间,用一个 map 数组记录某台计算机在某一时刻可以归还的算力。

由于每个任务请求的计算机是确定的,我们只需要判断这一时刻该计算机剩余的算力是否大于等于任务的需求,
否直接输出 -1,是的话减去消耗的算力。

三.代码

AC代码:
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <cmath>
#include <string>
#include <vector>
#include <cstring>
#include <queue>
#include <unordered_map>using namespace std;typedef long long int64;const int64 MaxN = 1e5 * 2 + 10;
int64 InN, InM;		//计算机数,任务数
int64 Vs[MaxN];		//每台计算机的可用算力
priority_queue<int64, vector<int64>, greater<int64>> PQ[MaxN];		//小顶堆,记录计算机在哪些时刻有任务结束
unordered_map<int64, int64> Map[MaxN];		//有任务结束的时刻,可以归还多少算力
int64 a, b, c, d;		//任务的四个属性int main()
{cin >> InN >> InM;for (int i = 1; i <= InN; i++) { scanf("%lld", Vs + i); }while (InM--){scanf("%lld%lld%lld%lld", &a, &b, &c, &d);//归还已经结束任务的算力,用小顶堆获取所有结束时间小于此刻的任务//注意归还算力应该放在任务计算之前while (PQ[b].size() > 0 && a >= PQ[b].top()){Vs[b] += Map[b][PQ[b].top()];Map[b][PQ[b].top()] = 0;PQ[b].pop();}if (Vs[b] < d) { cout << -1 << endl; }	//算力不够直接输出else{Vs[b] -= d;//堆去重if (Map[b].count(a + c) == 0 || Map[b][a + c] == 0) { PQ[b].push(a + c); }//累计a + c时刻可以归还的算力Map[b][a + c] += d;cout << Vs[b] << endl;}}return 0;
}

这篇关于[蓝桥杯 2021 省 AB2] 负载均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015504

相关文章

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】

文章目录 1.Ribbon(负载均衡,服务调用)1.1问题引出1.2 Ribbon负载均衡1.3 RestTemplate整合Ribbon1.4 指定Ribbon负载均衡策略1.4.1 配置文件1.4.2 配置类1.4.3 定义Ribbon客户端配置1.4.4 自定义负载均衡策略 2.OpenFeign面向接口的服务调用(服务发现,远程调用)2.1 OpenFeign的使用2.1 .1创建

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

MySQL数据库负载均衡

数据库负载均衡是通过将数据库请求分散到多个数据库服务器上,以提高数据库的处理能力和可用性。在高并发的场景下,使用数据库负载均衡器可以有效避免单点故障,提高系统的整体性能和可靠性。 数据库负载均衡器 数据库负载均衡器可以是硬件设备或软件解决方案。在MySQL环境中,一些流行的数据库负载均衡器包括: MySQL Proxy:MySQL Proxy是一个简单的中间件,用于监控、分析或增强对MySQ

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

828华为云征文|基于华为云Flexus X实例搭建Nginx集群负载均衡

目录 前言 一、Flexus云服务器X介绍 1.1 Flexus云服务器X实例简介 1.2 Flexus X实例购买 1.3 登录服务器 三、Springboot集群服务 3.1 部署9901节点服务 3.2 部署9902节点服务 四、Nginx负载均衡配置 五、集群负载调用测试 5.1 负载调用9901端口 5.2 负载调用9901端口 总结 前言 华为云Flexus X实例凭借其