小米笔试 小米秋招 0906
笔试时间:2025年9月6日
往年笔试合集:
第一题
Alice在家里搭了一个服务器,发现防火墙防护记录猛增。她使用了一个可以对比两次攻击类型是否一致的分析器。现在给出分析器判断哪些攻击之间存在差别,请判断该分析器是否输出了合理的结果。当且仅当对于某三次攻击a,b,c,分析器判断其中某两对攻击类型相同且第三对攻击类型不同,则认为分析器没有输出合理的结果。
输入描述
第一行有一个正整数T(1<=T<=100),代表测试数据的组数
对于每组测试数据: 第一行有两个正整数n,m(1<=n<=200,1<=m<=n*(n-1)/2),代表攻击次数以及分析器指出的类型存在差别的攻击对的数目
接下来两行每行均有m个正整数,第i列的两个数x,y代表分析器认为第x次攻击和第y次攻击的类型存在差别
输出描述
对于每组测试数据,若分析器输出的结果合理,输出Yes,否则输出No(注意首字母大写)
样例输入
3
4 4
1 1 4 4
2 3 2 3
3 1
1
2
5 8
1 1 2 5 1 3 2 3
2 4 5 4 3 5 3 4
样例输出
Yes
No
Yes
参考题解
解题思路:
使用邻接矩阵记录攻击对的差别关系,遍历所有可能的三个攻击组合,检查三对攻击中被标记为差别的总数。如果存在任何一个三元组的差别总数为1,则分析器结果不合理。
C++:
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
vector<int> a(m), b(m);
for (int i = 0; i < m; i++) cin >> a[i];
for (int i = 0; i < m; i++) cin >> b[i];
vector<vector<int>> p(n + 1, vector<int>(n + 1, 0));
for (int i = 0; i < m; i++) {
int x = a[i];
int y = b[i];
p[x][y] = 1;
p[y][x] = 1;
}
bool ans1 = true;
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
for (int k = j + 1; k <= n; k++) {
if (p[i][j] + p[i][k] + p[j][k] == 1) {
ans1 = false;
}
}
}
}
cout << (ans1 ? "Yes" : "No") << endl;
}
return 0;
}
Java:
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
int n = sc.nextInt();
int m = sc.nextInt();
int[] a = new int[m];
int[] b = new int[m];
for (int i = 0; i < m; i++) a[i] = sc.nextInt();
for (int i = 0; i < m; i++) b[i] = sc.nextInt();
int[][] p = new int[n + 1][n + 1];
for (int i = 0; i < m; i++) {
int x = a[i];
int y = b[i];
p[x][y] = 1;
p[y][x] = 1;
}
boolean ans = true;
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
for (int k = j + 1; k <= n; k++) {
if (p[i][j] + p[i][k] + p[j][k] == 1) {
ans = false;
}
}
}
}
System.out.println(ans ? "Yes" : "No");
}
}
}
Python:
t = int(input()) for _ in rang
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南
查看9道真题和解析