202203 CSP认证 | 计算资源调度器

2024-03-18 01:52

本文主要是介绍202203 CSP认证 | 计算资源调度器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

计算资源调度器
还好还好,这个题目读懂题意然后做就好了,难度不高

两个亲和性都是对可用区域做出限制,而反亲和性是对计算节点做出限制。
先分别计算可用区域有哪些以及非法的计算节点有哪些(两个都很简单),然后再遍历在合法可用区域上的所有计算节点,如果在非法节点里面就continue,否则就加入到备选答案里面去。
如果此时ans,也就是备选答案为空,且paar = 0。则删去非法节点的限制,将所有合法可用区中的节点全部加入到备选答案里面去。最后就是搜索了。

acwing上面TLE了…但是平台上过了…BTW既然这样我就不管了
在这里插入图片描述

满分代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct task{  //计算任务ll app;    //运行在哪个应用上int area;  //运行在哪个可用区上int node;  //运行在哪个节点上
};
const int N = 1010; //计算节点和分区的最大数目
const int INF = 0x3f3f3f3f;
int n, m;
int node_count[N];  //每个计算节点运行的任务数量
int node_zone[N];   //为了读取开的一个数组
unordered_map<ll, vector<task> > AppTask;  //app上运行的计算任务
unordered_map<int, vector<int> > Zone;   //每个可用区上有哪些计算节点//对可用区域进行限制,找到所有合法的可用区
unordered_set<int> cal_pa(int na, ll pa)
{unordered_set<int> avai_zone;if(!AppTask.count(pa)){    //当前应用没有运行任何的计算任务return avai_zone;}vector<task> vec = AppTask[pa];  //找到当前应用下运行的所有计算任务for(int i = 0;i < vec.size();i ++){if(na){  //如果有节点亲和性if(vec[i].area == na){   //当前应用有计算任务运行在该可用区域上,此时满足两个条件avai_zone.insert(na);break;}}else{avai_zone.insert(vec[i].area); //所有计算任务的可用区都合法}}return avai_zone;
}
//找到所有的不合法节点
unordered_set<int> cal_paa(ll paa)
{unordered_set<int> unavai_node;if(AppTask.count(paa)){vector<task> vec = AppTask[paa];for(int i = 0;i < vec.size();i ++){  //遍历该应用上的每一个计算任务unavai_node.insert(vec[i].node);   //每一个任务的计算节点都为不合法节点}}return unavai_node;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;for(int i = 1;i <= n;i ++){int x; cin >> x;Zone[x].push_back(i);node_zone[i] = x;}int f, na, paar, g;ll a, pa, paa;task temp;set<int> ans;  //因为需要节点的编号最小,这里用set而非unordered_setcin >> g;while(g --){cin >> f >> a >> na >> pa >> paa >> paar;bool flag = false; //对可用区是否有要求if(na || pa) flag = true;  //对可用区有要求while(f --){  //将每个任务独立处理-->主要是针对若paa = a的情况unordered_set<int> avai_zone;unordered_set<int> unavai_node;temp.app = a;if(pa) avai_zone = cal_pa(na, pa); //如果对pa&na || only pa有要求else if(na) avai_zone.insert(na);  //如果只对na有要求if(!avai_zone.size() && flag) {cout << "0 ";continue;}  //没有可用区满足要求,此时必然也没有节点满足要求if(paa)  unavai_node = cal_paa(paa);if(!flag){  //对可用区没有要求for(int i = 1;i <= n;i ++){if(unavai_node.count(i)) continue;  //只要不是非法计算节点都可ans.insert(i);}}else{for(auto az : avai_zone){  //遍历每一个可用区域for(auto node : Zone[az]){  //遍历该可用区中的每一个节点if(unavai_node.count(node)) continue;ans.insert(node);  //为合法的可用节点}}}if(!ans.size() && !paar){  //去掉反亲和性的要求for(auto az : avai_zone){for(auto node : Zone[az]){ans.insert(node);}}}if(!ans.size()) {cout << "0 "; continue;}//此时ans中留下来的都为筛选下来的合法节点int MAX = INF, index;for(auto node : ans){if(node_count[node] < MAX){MAX = node_count[node];index = node;}}cout << index << ' ';temp.node = index;temp.area = node_zone[index];AppTask[a].push_back(temp);node_count[index] ++;ans.clear();}cout << "\n";}return 0;
}

这篇关于202203 CSP认证 | 计算资源调度器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3