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

相关文章

浅析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

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版