2023大厂笔试模拟练习网站(含题解)
www.codefun2000.com
最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200+道互联网大厂模拟练习题,还在极速更新中。欢迎关注公众号“塔子哥学算法”获取最新消息。
提交链接:
https://codefun2000.com/p/P1138
为了更好的阅读体检,可以查看OJ上的题解。进入提交链接,点击右边菜单栏的"查看塔子哥的题解"
在线评测链接:P1266
题目内容
某大学一共有 n 门课程,编号为 1 ~ n , m 个学院,编号为1 ~ m 。最近开学季,很多学院都开放了选课窗口,但是很多课程在选课窗口也不一定能选择上,因为课程没有给某些学生开放选择权限,但是学生可以去找教务处帮忙选择该课程。
也就是说,如果塔子哥是计算机学院的一名学生,如果他可以选择计算机学院的一个课程,但是该课程没有开放权限让他选,他可以去找计算机学院的教务处帮忙选课,如果开放了权限,他就可以自己选课。但是如果塔子哥可以选择电气工程学院的一个课程,如果该课程没有开放权限,他就算是去找电气工程学院的教务处,这个教务处也无法帮塔子哥选课,因为塔子哥不是电气工程学院的学生,但如果该课程开放了权限,那么塔子哥就可以自己选课了。
因为这些过程自己一门门课程去想,很麻烦,所以学校想请你帮学生们制作一个能快速判断自己选课情况的程序,你能帮学校编写这个程序吗?
学校给出 n 门可选课程及其开课学院、允许在系统选课的年级和专业,进行 q 次查询,每次查询给出学生所属学院和待选课程,请你帮这些学生判断他们是否能选择该课程,如果能选,他应该怎样去选课。
若可以自行在选课,输出 Help yourself
,否则若可以由教务处成功代选,输出 Ask for help
,否则说明该学生无法选择该门课程,输出 Impossible
。
注意:
只有年级和学院都不被限制的学生可以自行选课。
输入描述
第一行输入为 3 个正整数;
第二行输入 n 个正整数,表示编号为 i 的课程的开课学院为 ;
接下来 4 行输入一个 4×n 的 01
矩阵 f , 表示没给 i 年级的学生开放选 j 课程的权限, 则表示开放了;
接下来 m 行输入一个的 01
矩阵 g , 表示没给 i 学院的学生开放自行选 j 课程的权限, 则表示开放了;
接下来 q 行,每行输入 3 个正整数 A,B,C ,表示学生所属学院、年级、待选课程。
输出描述
输出一共 q 行,每行一个字符串表示对应查询的结果。
样例
输入
5 5 10 5 10 5 3 6 0 1 0 1 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 1 1 1 1 4 3 1 2 2 4 2 3 5 4 3 4 1 3 3 5 4 1 5 2 4 1 4 4 5 1 3 5 3 1
输出
Impossible Help yourself Impossible Impossible Help yourself Ask for help Help yourself Help yourself Ask for help Ask for help
思路
模拟
按题意模拟即可。
-
自行选课:当前学生所在年级开放了选择当前课的权限,且当前学生所在学院开放了选择当前课的权限
-
教务处代选:不满足自行选课条件,且当前学生所在学院和课程所在学院是统一学院
-
无法选择:不满足上述两个条件
时间复杂度:O(nm)
类似题目推荐
LeetCode
周赛/双周赛 第一题
Codefun2000
-
美的 P1232. 2023.04.19-笔试-第一题-交换数值
-
P1174 华为od 2023.04.08--第一题-箱子之形摆放
-
P1166 美团 2023.04.08-第一题-换座位
代码
CPP
#include <bits/stdc++.h> using namespace std; const int N = 20; int n, m, Q; int s[N]; int f[5][N]; int g[N][N]; int main() { scanf("%d%d%d", &n, &m, &Q); for (int i = 1; i <= n; ++i) scanf("%d", &s[i]); for (int i = 1; i <= 4; ++i) for (int j = 1; j <= n; ++j) scanf("%d", &f[i][j]); for (int i = 1; i <= m; ++i) for (int j = 1; j <= n; ++j) scanf("%d", &g[i][j]); while (Q--) { int A, B, c; scanf("%d%d%d", &A, &B, &c); if (f[B][c] == 1 && g[A][c] == 1) { puts("Help yourself"); } else if (s[c] == A) { puts("Ask for help"); } else { puts("Impossible"); } } return 0; }
python
n, m, Q = map(int, input().split()) f = [] g = [] s = list(map(int, input().split())) for i in range(len(s)): s[i] -= 1 for i in range(1, 5): f.append(list(map(int, input().split()))) for i in range(1, m + 1): g.append(list(map(int, input().split()))) for _ in range(Q): A, B, c = map(int, input().split()) A -= 1 B -= 1 c -= 1 if f[B][c] == 1 and g[A][c] == 1: print("Help yourself") elif s[c] == A: print("Ask for help") else: print("Impossible")
Java
import java.util.Scanner; public class Main { static final int N = 20; static int n, m, Q; static int[] s = new int[N]; static int[][] f = new int[5][N]; static int[][] g = new int[N][N]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); Q = sc.nextInt(); for (int i = 1; i <= n; ++i) s[i] = sc.nextInt(); for (int i = 1; i <= 4; ++i) for (int j = 1; j <= n; ++j) f[i][j] = sc.nextInt(); for (int i = 1; i <= m; ++i) for (int j = 1; j <= n; ++j) g[i][j] = sc.nextInt(); while (Q-- > 0) { int A = sc.nextInt(); int B = sc.nextInt(); int c = sc.nextInt(); if (f[B][c] == 1 && g[A][c] == 1) { System.out.println("Help yourself"); } else if (s[c] == A) { System.out.println("Ask for help"); } else { System.out.println("Impossible"); } } } }
Go
package main import "fmt" const N = 20 func main() { var n, m, Q int fmt.Scan(&n, &m, &Q) s := make([]int, n+1) for i := 1; i <= n; i++ { fmt.Scan(&s[i]) } f := make([][]int, 5) for i := 1; i <= 4; i++ { f[i] = make([]int, n+1) for j := 1; j <= n; j++ { fmt.Scan(&f[i][j]) } } g := make([][]int, m+1) for i := 1; i <= m; i++ { g[i] = make([]int, n+1) for j := 1; j <= n; j++ { fmt.Scan(&g[i][j]) } } for ; Q > 0; Q-- { var A, B, c int fmt.Scan(&A, &B, &c) if f[B][c] == 1 && g[A][c] == 1 { fmt.Println("Help yourself") } else if s[c] == A { fmt.Println("Ask for help") } else { fmt.Println("Impossible") } } }
Js
process.stdin.resume(); process.stdin.setEncoding('utf-8'); let input = ''; process.stdin.on('data', (data) => { input += data; return; }); process.stdin.on('end', () => { const lines = input.trim().split('\n'); const [n, m, Q] = lines.shift().trim().split(' ').map(Number); const s = new Array(n + 1); const row = lines.shift().trim().split(' ').map(Number); for (let i = 0; i < n; ++i) s[i + 1] = row[i]; const f = new Array(5).fill(null).map(() => new Array(n + 1)); for (let i = 1; i <= 4; ++i) { const row = lines.shift().trim().split(' ').map(Number); for (let j = 1; j <= n; ++j) { f[i][j] = row[j - 1]; } } const g = new Array(m + 1).fill(null).map(() => new Array(n + 1)); for (let i = 1; i <= m; ++i) { const row = lines.shift().trim().split(' ').map(Number); for (let j = 1; j <= n; ++j) { g[i][j] = row[j - 1]; } } for (let i = 0; i < Q; ++i) { const [A, B, c] = lines.shift().trim().split(' ').map(Number); if (f[B][c] === 1 && g[A][c] === 1) { console.log("Help yourself"); } else if (s[c] === A) { console.log("Ask for help"); } else { console.log("Impossible"); } } });