#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;
}
2024年华为OD机试真题-精准核酸检测 C/C++解法
最新推荐文章于 2024-07-25 19:00:00 发布