Skip to content

小米秋招笔试

  1. 对选择器权重排序,但是只过了 36%,GPT 也搞不懂哪里不对。

    🔍 展开代码
    1.js
    js
    const rl = require("readline").createInterface({
      input: process.stdin,
    });
    const inputs = [];
    rl.on("line", (line) => inputs.push(line));
    rl.on("close", () => {
      const n = +inputs[0];
      const selectors = inputs.slice(1).map((s) => s.split(" "));
      const result = deal(n, selectors);
      console.log(result);
    });
    
    function deal(n, selectors) {
      const infos = Array.from({ length: n }, () => {});
      for (let i = 0; i < n; i++) {
        const currentSelector = selectors[i];
        let value = 0;
        for (const s of currentSelector) {
          if (s.startsWith("#")) value += 100;
          else if (s.startsWith(".")) value += 10;
          else value += 1;
        }
        infos[i] = {
          value,
          index: i,
        };
      }
      infos.sort((a, b) => {
        if (a.value === b.value) return b.index - a.index;
        return b.value - a.value;
      });
      let res = "";
      for (const i of infos) {
        res += ` ${i.index + 1}`;
      }
      return res.slice(1);
    }
  2. 有 n 次网络攻击,现在分析器会分析得到其中 m 次攻击是不同性质的。并给出这 m 组数据(按照两行格式,每一列的两个数表示这两次攻击不同)。现在要求你对给定的 times 组测试数据检验,分析器的结果是否正确并输出。当且仅当三次攻击的两两组合有且仅有一组是性质不同的,我们才认为分析器结果失误。

    只过了 18%,同样也是令 GPT 不觉得错误……

    🔍 展开代码
    2.js
    js
    const rl = require("readline").createInterface({
      input: process.stdin,
    });
    const inputs = [];
    rl.on("line", (line) => inputs.push(line));
    rl.on("close", () => {
      const times = +inputs[0];
      for (let i = 1; i <= 1 + (times - 1) * 3; i += 3) {
        const [n, m] = inputs[i].split(" ").map(Number);
        const case1 = inputs[i + 1].split(" ").map(Number);
        const case2 = inputs[i + 2].split(" ").map(Number);
    
        const result = deal(n, m, case1, case2);
        console.log(result);
      }
    });
    
    function deal(n, m, case1, case2) {
      const analysis = Array.from({ length: m }, (_, index) =>
        [case1[index], case2[index]].sort((a, b) => a - b),
      );
      const results = [];
      const used = new Set();
      function dfs(path) {
        if (path.length === 3) {
          results.push(path.slice());
          return;
        }
        for (let i = 1; i <= n; i++) {
          if (used.has(i)) continue;
          used.add(i);
          dfs(path.concat(i));
          used.delete(i);
        }
      }
      dfs([]);
    
      for (const comp of results) {
        const a = [comp[0], comp[1]].sort((a, b) => a - b);
        const b = [comp[1], comp[2]].sort((a, b) => a - b);
        const c = [comp[0], comp[2]].sort((a, b) => a - b);
    
        const flag1 = analysis.some((pair) => arraysEqual(pair, a));
        const flag2 = analysis.some((pair) => arraysEqual(pair, b));
        const flag3 = analysis.some((pair) => arraysEqual(pair, c));
    
        if (flag1 + flag2 + flag3 === 1) return "No";
      }
      return "Yes";
    }
    
    function arraysEqual(arr1, arr2) {
      if (arr1.length !== arr2.length) return false;
      for (let i = 0; i < arr1.length; i++) {
        if (arr1[i] !== arr2[i]) return false;
      }
      return true;
    }