题目来源

2021年蓝桥省赛第二场I题

题目链接:http://acm.mangata.ltd/p/P1480

考点

优先队列、模拟

视频讲解

视频连接:https://www.bilibili.com/video/BV1ST4y117fs

思路

因为有n台计算机,所以我们可以开一个数组V,V[i]表示第i台机器的算力大小,考虑到一个任务是在第a[i]时刻开始到a[i]+c[i]结束的,所以我们得想办法记录下来,但是都记录吗?咱们NO,其实每当一个任务来临得时候,我们只需要看看指定的这一台计算机有哪些任务以及结束了,由于a数组(时间)是严格升序的,我们会发现只需要记录下结束的时间即可,我们每次有一个任务来临我们就把之前任务的算力释放出来,那么我们应该从最早结束的任务开始查看,如果以及结束了,那么我们就释放,然后看下一个任务,如果没有结束,那么后面的任务都不会在当前时刻结束,然后我们就能计算出当前还剩下多少算力,然后和当前这个任务进行判断如果能执行,那么继续放在我们的这个任务序列中

现在的问题就变成了,我们怎么维护每个计算机的任务序列,我们很容易能想到堆,用一个小顶堆来维护,因为我们的任务结束时间需要升序,STL已经帮我们实现好了也就是priority_queue即优先队列,然后我们每个任务除了结束时间,我们还应该知道这个任务的算力,因为我们要释放算力,这里我们可以直接使用pair<int,int>或者使用自定义结构体,但是结构体需要自己写重载,所以我这里推荐大家使用pair。那么我们就来写代码吧!

代码

#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000009
#define endl "\n"
#define PII pair<int,int>int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};ll ksm(ll a,ll b) {ll ans = 1;for(;b;b>>=1LL) {if(b & 1) ans = ans * a % mod;a = a * a % mod;}return ans;
}ll lowbit(ll x){return -x & x;}const int N = 2e5+10;
//----------------自定义部分----------------
int n,m,q,a,b,c,d,V[N];
priority_queue<PII,vector<PII>,greater<PII> > que[N];//维护n台电脑的小顶堆int main()
{cin>>n>>m;for(int i = 1;i <= n; ++i) cin>>V[i];//输出算力 for(int i = 0;i < m; ++i) {cin>>a>>b>>c>>d;while(que[b].size()){int ed = que[b].top().first;//当前最先结束的任务的时间int kk = que[b].top().second;//当前最先结束的任务的算力if(ed > a) break;//如果当前任务结束时间大于当前时间,后面的任务肯定都大于V[b] += kk;que[b].pop();}if(V[b] < d){//如果当前的算力不足,那么直接输出-1cout<<"-1"<<endl;}else{//如果当前的算力充足,那么就把这个任务放入b计算机的队列中que[b].push({a+c,d});V[b] -= d;cout<<V[b]<<endl;}}return 0;
}
/*
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. 蓝桥每日真题之时间显示

    题目来源 2021年蓝桥杯省赛第一场F题 题目链接:http://acm.mangata.ltd/p/P1488 考点 暴力.小技巧 视频讲解 视频连接:https://www.bilibili.co ...

  2. 蓝桥每日真题之完全日期

    题目来源 2021年蓝桥杯国赛C题 题目链接:http://acm.mangata.ltd/p/P1504 考点 暴力枚举,常识or手数 视频讲解 视频连接:https://www.bilibili. ...

  3. 蓝桥每日真题之完全平方数

    题目来源 2021年蓝桥省赛第二场H题 题目链接:http://acm.mangata.ltd/p/P1165 视频讲解 视频连接:https://www.bilibili.com/video/BV1 ...

  4. 蓝桥每日真题之整数分解

    题目来源 2021年蓝桥省赛第二场D题 题目连接:http://acm.mangata.ltd/p/P1102 视频讲解 https://www.bilibili.com/video/BV11L4y1 ...

  5. python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在19351936年应邀来中国清华大学讲学。。。

    python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学... 问题描述 全排列模板: 美国数学家维纳(N. ...

  6. 第五届蓝桥杯真题解析【JavaC组】

    第五届蓝桥杯真题解析[JavaC组] 业精于勤,荒于嬉:行成于思,毁于随.--韩愈 文章目录 ***第五届蓝桥杯真题解析[JavaC组]*** 前言 A:猜年龄 B:等额本金 C:猜字母 D:大衍数列 ...

  7. 【蓝桥杯真题】16天冲刺 Python

    距离比赛很快了,希望和我一起准备的PY党能更加熟练的掌握Python! 1.距离和(模拟赛填空题) 问题描述: 两个字母之间的距离定义为它们在字母表中位置的距离.例如 A和 C 的距离为 2,L 和  ...

  8. 蓝桥杯真题:三羊献瑞

    蓝桥杯真题:三羊献瑞 观查下面的加法算式: 其中相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 分析 ...

  9. # 2014年蓝桥杯真题CC++B组

    2014年蓝桥杯真题C/C++B组 1.啤酒和饮料 题目描述 啤酒每罐2.3元,饮料每罐1.9元,小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道她买的啤酒比饮料的数量多,请你计算他买了几罐啤 ...

最新文章

  1. corosync+pacemaker高可用集群
  2. VOC2007基本信息
  3. 3DSlicer17:Logics
  4. Mysql数据库常用命令,mysql速学实用教程。
  5. C#面向对象系列(2):构造函数的用法
  6. 英语对IT从业者的影响
  7. 华为零售商品识别一等奖方案
  8. Bailian4034 选择客栈【序列处理】
  9. 会声会影2022美颜功能介绍 教你玩转视频美颜
  10. POODLE SSLv3 安全漏洞 (CVE-2014-3566)
  11. 洛谷 P2123 皇后游戏 解题报告
  12. 简单个人网页设计作业 静态HTML个人博客主页——HTML+CSS+JavaScript 明星鹿晗(7页)
  13. icloud连接服务器时出现问题_iphone8 icloud连接服务器时出现问题
  14. 越豪华越危险 家装豪华程度与环境污染成正比
  15. 新任务管理系统YYSchedule-介绍-引擎执行机制及结果回收机制
  16. js复制功能,可粘贴到文档,粘贴栏(复制内容有格式)
  17. 编程领域名词:魔法数值、魔法数字、魔法值
  18. 大数据对人们的好处_大数据给人们生活带来哪些好处?
  19. 你要的来了:ArcGIS空间插值分析方法权威解读
  20. avi视频文件太大怎么变小

热门文章

  1. SQL Server性能调优--优化建议(二)
  2. 什么是可哈希的(hashable)
  3. 2.1 - 递归练习题
  4. javascript常见错误
  5. PHP指定字段的多维数组排序方法
  6. ADO.NET 3.5 同SQL 2008的新的存储过程保存方式
  7. 自动化测试基础篇--Selenium多窗口、句柄问题
  8. hashCode and equals in map
  9. Go语言跨平台预编译
  10. 【小程序开发】微信小程序开发中遇到的那些坑...