首页 > 其他分享 >华为 2023年4月19日 实习 机试第一题——批量初始化次数

华为 2023年4月19日 实习 机试第一题——批量初始化次数

时间:2024-04-03 17:16:03浏览次数:25  
标签:初始化 依赖 批量 19 dg int 模块 2023 机试

某部门在开发一个代码分析工具,需要分析模块之间的依赖关系,用来确定模块的初始化顺序,是否有循环依期等问题。

“批量初始化” 是指一次可以初始化一个或多个模块。

例如 模块 1 依赖模块 2, 模块 3 也依赖模块 2, 但模块 1 和 3 没有依赖关系, 则必须先 “批量初始化” 模块 2,再 “批量初始化” 模块 1 和 3。

现给定一组模块间的依赖关系,请计算需要 “批量初始化” 的次数。

输入

  1. 第 1 行只有一个数字.表示模块总数 NNN。
  2. 随后的 NNN 行依次表示模块 1 到 NNN 的依赖数据。每行的第 1 个数表示依赖的模块数量(不会超过 NNN),之后的数字表示当前模块依赖的 ID 序列。该序列不会重复出现相同的数字,模块 ID 的取值定在 [1,N] 之内。
  3. 模块总数 NNN 取值范围 1<=N<=1000
  4. 每一行里面的数字按 1 个空格分隔。

输出

输出 “批量初始化次数”
若有循环依赖无法完成初始化,则输出 -1。

示例一

输入

5
3 2 3 4
1 5
1 5
1 5 0

输出

3

说明

  • 共 5 个模块。
  • 模块 1 依赖模块 2、3、4;
  • 模块 2 依赖模块 5
  • 模块 3 依赖模块 5
  • 模块 4 依赖模块 5
  • 模块 5 没有依赖任何模块
  • 批量初始化顺序为 {5}->{2,3,4}->{1},共需 “批量初始化” 3 次

示例二

输入

3
1 2
1 3
1 1

输出

-1

说明

存在循环依赖,无法完成初始化,返回-1

解法

每次选择出度为0的资源进行初始化,计算总共有多少躺,如果某一躺初始化的资源数为0(即找不到出度为0的资源,那么就存在环,输出-1返回)

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // 思路:每次迭代找出出度为0的资源,删除后再次查找出度为0的资源
    int n;
    cin>>n;
    vector<pair<int, bool>> dg(n, {0, false});   // 出度,是否被加载
    vector<vector<bool>> map(n, vector<bool>(n, false));
    int num;
    for (int i = 0; i < n; i++) {
        cin>>dg[i].first;
        for (int j = 0; j < dg[i].first; j++) {
            cin>>num;
            map[i][num - 1] = true;
        }
    }
    int cnt = n;
    int times = 0;
    while (cnt > 0) {
        // 找出出度为0的资源
        int del = 0;
        for (int i = 0; i < n; i++) {
            if (!dg[i].second && dg[i].first == 0) {
                // 将其从其他资源的出边删除
                dg[i].second = true;
                for (int j = 0; j < n; j++) {
                    if (map[j][i]) {
                        map[j][i] = false;
                        dg[j].first--;
                    }
                }
                del++;
                cnt--;
            }
        }
        if (del > 0) {
            times++;
        } else if (del == 0) {
            cout<<-1<<endl;
            return 0;
        }
    }
    cout<<times<<endl;
    return 0;
}

 

标签:初始化,依赖,批量,19,dg,int,模块,2023,机试
From: https://www.cnblogs.com/jolintsai/p/18113105

相关文章

  • CF1909G Pumping Lemma 题解
    题目链接题目要求我们对合法三元组进行计数,直接做是困难的,因此考虑通过枚举确定一部分元素再进行判定求解,那我们固定什么呢?固定\(x\)和\(y+z\)的分界线没啥用,因此我们枚举确定\(S\)中\(x+y\)和\(z\)的分界线,这样能确定一长串\(y^{k-1}\)所在的区间。接着我们不难想......
  • P1957 口算练习题
    题目描述王老师正在教简单算术运算。细心的王老师收集了 i 道学生经常做错的口算题,并且想整理编写成一份练习。编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如 5+85+8 的算式最好只要输入 55 和 88,输出的结果......
  • K11998 括号画家
    题目描述小科是一名漫画家,他有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的他画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是小科定义了什么样的括号序列是美观的:①空的括号序列是美观的;②若括号序列A是......
  • 【华为OD】2024年华为OD机试C卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
    【华为OD】2024年C卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客 2024年华为OD机试C卷真题题集题库,有2种分数的题目列表分别是100分的列表、200分的列表需要订阅请看链接:C卷......
  • 【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)
    [蓝桥杯2019国AC]轨道炮题目描述小明在玩一款战争游戏。地图上一共有NNN个敌方单位,可以看作2D平面上的点。其中第i......
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
    [蓝桥杯2019国B]解谜游戏题目背景题目描述小明正在玩一款解谜游戏。谜题由242424根塑料棒组成,其中黄色塑料棒4......
  • Oracle19C与win32_11gR2_client兼容问题
     1、安装Oracle19c服务端后,创建表空间、用户信息等,导入数据,安装plsql,正常登录; 2、安装win32_11gR2_client后连接不上数据库; 3、在Oracle19C安装目录下,找到该配置文件:E:\X64_193000_db_home\network\admin\sqlnet.ora:在最后加上:SQLNET.ALLOWED_LOGON_VERS......
  • 【专题】2023年中国汽车出海研究报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34260原文出处:拓端数据部落公众号近年来,我国汽车出口需求旺盛,并保持强劲增长趋势,至2023年一季度,汽车出口总量首超日本,中国汽车“破浪出海”正当时。本报告合集旨在通过梳理中国汽车的出海背景,分析汽车厂商出海的现状及特点,洞察中国汽车出海的风险......
  • 洛谷 P1008 [NOIP1998 普及组] 三连击
    这道题我们可以用桶排序来做,代码如下:#include<bits/stdc++.h>//万能头 usingnamespacestd;//好习惯 inta[10];//一个桶数组,来确定是否有重复的 intmain(){   ints1,s2,s3;//定三个函数,用于判断    intsum=0;//用于判断数字是否重复    for(int......
  • P7219 [JOISC2020] 星座 3【笛卡尔树+整体dp】
    P7219[JOISC2020]星座3笛卡尔树+整体dp(线段树合并维护dp)考虑转化题意,不存在矩形为星座,即对于每个极大矩形中都只有一颗星星。而观察题目的方格,对于两个位置是否能够成为一个矩形,只和两个位置的区间最大值(小白船的位置)有关①。图中的红蓝矩形即为两个极大矩形。将删除星......