2024年华为OD机试真题-精准核酸检测 C/C++解法

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

/// @brief 对一个只包含数字和分隔符的字符串,从中取值并添加到vector<int>中
/// @param str 
/// @param fill_vec 
/// @param delim 
static void fill_vector_from_str(const string &str, vector<int> &fill_vec, char delim)
{
    int pos = 0;
    size_t find_delim;
    do
    {
        find_delim = str.find(delim, pos);
        string sub_str = str.substr(pos, find_delim - pos);
        pos = find_delim + 1;

        int infect_id = atoi(sub_str.c_str());
        fill_vec.push_back(infect_id);
    } while (find_delim != string::npos);
}

// 精准核酸检测
static void HuaWei_OD_test21(void)
{
    int total_man;
    cin >> total_man;

    cin.get();

    string infect_man_str;
    getline(cin, infect_man_str);

    vector<int> already_infected_vec;

    fill_vector_from_str(infect_man_str, already_infected_vec, ',');

    vector<vector<int>> link_matrix;

    for (int i = 0; i < total_man; i++)
    {
        string link_str;
        getline(cin, link_str);

        vector<int> link_vec;
        fill_vector_from_str(link_str, link_vec, ',');

        link_matrix.push_back(link_vec);
    }

    // 从头开始
    vector<int> link_vec = already_infected_vec;
    for (int i = 0; i < total_man; i++)
    {
        for (int l = 0; l < link_vec.size(); l++)
        {
            int source = link_vec[l];

            // 如果在传播链且没有计入link_vec
            if (link_matrix[source][i] == 1 &&
                std::find(link_vec.begin(), link_vec.end(), i) == link_vec.end())
            {
                link_vec.push_back(i);
            }
        }
    }

    cout << link_vec.size() - already_infected_vec.size() << endl;
}

int main()
{
    HuaWei_OD_test21();
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值