Acwing 3492 负载均衡

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注

考点 模拟+小根堆

分析

由于计算机之间是独立的,这题模拟+堆即可
维护当前ai时刻计算机剩余算力或者消耗算力****是多少

运用堆/优先队列维护当前ai时刻前的右端点区间删掉
能将堆顶删掉就一直删掉,直至当前堆顶的右端点在ai时刻的右边

实现

删完后记得将算力值进行恢复,即让s[b]+=p[b].poll()[1]即可
算力不够当前的b值,则输出-1
入队时需要将算力值减去,即s[b]-=d

PriorityQueue

API文档

Accode

import java.util.*;
import java.io.*;
public class Main{
	static int N=200010;
	static int n,m;
	static int s[]=new int[N];
	static PriorityQueue<int[]>[]q=new PriorityQueue[N];
	//小根堆/优先队列
	//堆顶为当前最小值
	
	//Comparator比较器
	static Comparator<int[]>cmp=new Comparator<int[]>() {
		@Override
		public int compare(int[] o1, int[] o2) {
			// TODO Auto-generated method stub
			return o1[0]-o2[0];
			//按结构体的第一数比较大小
		}
	};
	
	public static void main(String []args) throws IOException {
	//初始化结构体
	for(int i=0;i<N;i++) {
		q[i]=new PriorityQueue<>(cmp);
	}
	
	BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
	String []str=bf.readLine().split(" ");
	n=Integer.parseInt(str[0]);
	m=Integer.parseInt(str[1]);
	str=bf.readLine().split(" ");
	for(int i=1;i<=n;i++)s[i]=Integer.parseInt(str[i-1]);
	//读入n台计算机的运算能力
	
	while(m-->0) {
		int a,b,c,d;
		str=bf.readLine().split(" ");
		a=Integer.parseInt(str[0]);
		b=Integer.parseInt(str[1]);
		c=Integer.parseInt(str[2]);
		d=Integer.parseInt(str[3]);
		
		while(q[b].size()>0&&q[b].peek()[0]<=a) {
		    //队列不为空并且堆顶元素的大小<=a
		    //终点小于当前的起点a时
			s[b]+=q[b].poll()[1];
			//运算能力恢复q[b].poll()[1]这么多点
		}
		if(s[b]<d)System.out.println("-1");
		//运算能力不够当前需要的d点时,输出-1
		else {
			int []task= {a+c,d};
			//task结构体第一个数存的是终点时刻
			//第二个数存的是运算能力
			q[b].add(task);
			//入队
			s[b]-=d;
			//运算能力减去d点
			System.out.println(s[b]);
			//输出剩余的运算能力即可
		}
	}
	}
}

往期回顾

不清楚蓝桥杯考什么的点点下方👇

考点秘籍

想背纯享模版的伙伴们点点下方👇

蓝桥杯省一你一定不能错过的模板大全(第一期)

蓝桥杯省一你一定不能错过的模板大全(第二期)

蓝桥杯省一你一定不能错过的模板大全(第三期)

蓝桥杯省一你一定不能错过的模板大全(第四期)!!!

想背注释模版的伙伴们点点下方👇

蓝桥杯必背第一期

蓝桥杯必背第二期

往期精彩回顾

蓝桥杯上岸每日N题 第一期(一)!!!

蓝桥杯上岸每日N题第一期(二)!!!

蓝桥杯上岸每日N题第一期(三)!!!

蓝桥杯上岸每日N题第二期(一)!!!

蓝桥杯上岸每日N题第三期(一)!!!

蓝桥杯上岸每日N题 第四期(最少刷题数)!!!

蓝桥杯上岸每日N题 第五期(山)!!!

蓝桥杯上岸每日N题 第六期(求阶乘)!!!

蓝桥杯上岸每日N题 第七期(小猫爬山)!!!

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

蓝桥杯每日N题 (消灭老鼠)

蓝桥杯每日N题(杨辉三角形)

蓝桥杯每日N题 (砝码称重)

蓝桥杯上岸每日N题(鸡尾酒)

操作系统期末题库 第九期(完结)

LeetCode Hot100 刷题(第三期)

idea创建SpringBoot项目报错解决方案

数据库SQL语句(期末冲刺)

想看JavaB组填空题的伙伴们点点下方 👇

填空题

竞赛干货

算法竞赛字符串常用操作大全

蓝桥杯上岸必刷!!!(模拟/枚举专题)

蓝桥杯上岸必背!!! (第三期 DP)

蓝桥杯上岸必背!!!(第四期DFS)

蓝桥杯上岸必背!!!(第五期BFS)

蓝桥杯上岸必背!!!(第六期树与图的遍历)

蓝桥杯上岸必背!!!(第七期 最短路算法)

蓝桥杯上岸必背!!!(第八期 简单数论)

蓝桥杯上岸必刷!!!(进制、数位专题)

蓝桥杯上岸考点清单 (冲刺版)!!!

蓝桥杯上岸必背模板 (纯享版)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寸 铁

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值