【华为OD】C卷真题 100%通过:精准核酸检测 JS语言实现[思路+代码]

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

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

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

说明

编号为1、2号的人员,为确诊病例。

1号与0号有接触,0号与3号有接触。

2号与4号有接触。

所以,需要做核酸检测的人是0号、3号、4号,总计3人需要进行核酸检测。

备注

人员编号从0开始

0

      5
              +--------++++++
              |   | 
              |   | 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();

【华为OD】C卷真题 100%通过:精准核酸检测 JS语言实现[思路+代码]_第1张图片

你可能感兴趣的:(杂谈,算法,数据结构,华为od,c语言,python,java,javascript)