C语言代码实现:
【华为OD】C卷真题 100%通过:精准核酸检测 C语言实现-CSDN博客
python代码实现:
【华为OD】C卷真题 100%通过:精准核酸检测 Python实现_为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准固定可-CSDN博客
Java代码实现:
【华为OD】C卷真题 100%通过:精准核酸检测 Java实现-CSDN博客
C++代码实现:
【华为OD】C卷真题 100%通过:精准核酸检测 C/C++实现-CSDN博客
JS代码实现:
【华为OD】C卷真题 100%通过:精准核酸检测 JS语言实现[思路+代码]-CSDN博客
为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准圈定可能被感染的人群。
现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是否存在轨迹的交叉。
现在给定一组确诊人员编号(X1, X2, X3, .... Xn),在所有人当中,找出哪些人需要进行核酸检测,输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检测)
需要进行核酸检测的人,是病毒传播链条上的所有人员,即有可能通过确诊病例所能传播到的所有人。
例如:A是确诊病例,A和B有接触、B和C有接触、C和D有接触、D和E有接触,那么B\C\D\E都是需要进行核酸检测的人。
输入描述
第一行为总人数N
第二行为确诊病例人员编号(确诊病例人员数量 第三行开始,为一个N*N的矩阵,表示每个人员之间是否有接触,0表示没有接触,1表示有接触。 输出描述 整数:需要做核酸检测的人数 输入输出示例仅供调试,后台判题数据一般不包含示例 输入 输出 说明 编号为1、2号的人员,为确诊病例。 1号与0号有接触,0号与3号有接触。 2号与4号有接触。 所以,需要做核酸检测的人是0号、3号、4号,总计3人需要进行核酸检测。 备注 人员编号从0开始 0 5 使用哈希表保存每一个被感染的人,遍历使用广度优先[队列]的方式来遍历即可,最后所有被感染数量减去已被确诊的人即可得到结果 示例1
5
1,2
1,1,0,1,0
1,1,0,0,0
0,0,1,0,1
1,0,0,1,0
0,0,1,0,1
3
+--------++++++
| |
| | 3 3
| |
| +---+ -++++----
| | | |
2 | | 2 | | 2
| | | |
+----------+ | ++++++ ------------------+ | +---+
| | | | | |
6 | | 1 4 | | 1 | | 1
| | | | | |
+---+ +---------+ +---+ +---+ +---+ +----
| | | | | |
0 | | | 0 0 | | | 0 | |
| | | | | |
+---+ +++ +------------------------+ +---+---+----+---+
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21题目解析:
JS语言代码实现:
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
function getPeople(all, n, target, targetSize) {
let star = [];
let tars = [];
let starSize = 0;
let tarsSize = 0;
for (let i = 0; i < targetSize; i++) {
star[starSize++] = target[i];
tars[tarsSize++] = target[i];
}
while (tarsSize > 0) {
let cur = tars[0];
for (let i = 0; i < n; i++) {
if (all[cur][i] === 1) {
let found = false;
for (let j = 0; j < starSize; j++) {
if (star[j] === i) {
found = true;
break;
}
}
if (!found) {
star[starSize++] = i;
tars[tarsSize++] = i;
}
}
}
for (let k = 0; k < tarsSize - 1; k++) {
tars[k] = tars[k + 1];
}
tarsSize--;
}
return starSize - targetSize;
}
async function main() {
const n = parseInt(await readline());
const strt = await readline();
const target = strt.split(",").map(Number);
let targetSize = target.length;
const allVec = [];
for (let i = 0; i < n; i++) {
const str = await readline();
allVec[i] = str.split(',').map(Number);
}
console.log(getPeople(allVec, n, target, targetSize));
rl.close();
}
main();