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

相关文章

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

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

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

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

Golang进程权限调度包runtime

关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行GOMAXPROCS:设置最大的可同时使用的 CPU 核数Goexit:退出当前 goroutine(但是defer语句会照常执行)NumGoroutine:返回正在执行和排队的任务总数GOOS:目标操作系统NumCPU:返回当前系统的 CPU 核数量 p

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18