【备战秋招】每日一题:4月29日美团春招第一题:题面+题目思路 + C++/python/js/Go/java带注释

news2024/11/18 1:22:37

 为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-选修课

在线评测链接:P1266

题目内容

某大学一共有 n 门课程,编号为 1 ~ n , m 个学院,编号为1 ~ m 。最近开学季,很多学院都开放了选课窗口,但是很多课程在选课窗口也不一定能选择上,因为课程没有给某些学生开放选择权限,但是学生可以去找教务处帮忙选择该课程。

也就是说,如果塔子哥是计算机学院的一名学生,如果他可以选择计算机学院的一个课程,但是该课程没有开放权限让他选,他可以去找计算机学院的教务处帮忙选课,如果开放了权限,他就可以自己选课。但是如果塔子哥可以选择电气工程学院的一个课程,如果该课程没有开放权限,他就算是去找电气工程学院的教务处,这个教务处也无法帮塔子哥选课,因为塔子哥不是电气工程学院的学生,但如果该课程开放了权限,那么塔子哥就可以自己选课了。

因为这些过程自己一门门课程去想,很麻烦,所以学校想请你帮学生们制作一个能快速判断自己选课情况的程序,你能帮学校编写这个程序吗?

学校给出 n 门可选课程及其开课学院、允许在系统选课的年级和专业,进行 q 次查询,每次查询给出学生所属学院和待选课程,请你帮这些学生判断他们是否能选择该课程,如果能选,他应该怎样去选课。

若可以自行在选课,输出 Help yourself ,否则若可以由教务处成功代选,输出 Ask for help ,否则说明该学生无法选择该门课程,输出 Impossible

注意:

只有年级和学院都不被限制的学生可以自行选课。

输入描述

第一行输入为 3 个正整数n , m , q (1 \leq n , m \leq 10 , 1 \leq q \leq 1000)

第二行输入 n 个正整数s_i(1 \leq s_i \leq 10),表示编号为 i 的课程的开课学院为s_i

接下来 4 行输入一个 4×n 的 01矩阵 f , f_{ij}=0 表示没给 i 年级的学生开放选 j 课程的权限, f_{ij}=1 则表示开放了;

接下来 m 行输入一个m\times n01 矩阵 g , g_{ij}=0 表示没给 i 学院的学生开放自行选 j 课程的权限, g_{ij}=1 则表示开放了;

接下来 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

  1. 美的 P1232. 2023.04.19-笔试-第一题-交换数值

  2. P1174 华为od 2023.04.08--第一题-箱子之形摆放

  3. 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");
        }
    }
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/654696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 53 - II: 0~n-1中缺失的数字

看到这道题的第一反应就是二分查找&#xff0c;由于是递增的所以二分查找所需的时间很短 &#xff0c;设置一个左&#xff0c;一个右&#xff0c;一个中间&#xff0c;如果判断吧不同需要想下前面是否一样&#xff0c;如果是那么就找到&#xff0c;不是再继续二分查找。 我的思…

【redis】redis的5种数据结构及其底层实现原理

文章目录 redis中的数据结构redis数据结构底层实现stringlisthashsetintset字典 zset跳表插入删除过程 redis中的数据结构 Redis支持五种数据类型&#xff1a;string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xff08;…

小波变换之pycwt (python)

小波变换之pycwt PyCWT是用于连续小波谱分析的Python模块&#xff0c;它包括小波变换和FFT算法统计分析的常规操作的集合。此外&#xff0c;该模块还包括交叉小波变换、小波相干性测试和样例脚本。 该模块需要NumPy和SciPy&#xff0c;matplotlib模块。 pip安装&#xff1a;…

SSMP整合案例(1) 构建 Spring Boot Vue MySql项目环境

前面 我们通过 java springboot整合MyBatis做数据库查询操作 java springboot整合MyBatis-Plus 多用点Plus支持一下国人开发的东西吧 java springboot整合Druid数据源配置 大体熟悉了springboot正好第三方应用的操作 那么 我们就来写一个 基于springboot的SSMP整合案例 其实就…

MongoDB快速实战与基本原理-1

一、MongoDB介绍 1、什么是MongoDB MongoDB是 一个文档数据库&#xff08;以 JSON 为数据模型&#xff09; &#xff0c;由C语言编写&#xff0c;旨在 为 WEB应用提供可扩展的高性能数据存储解决方案。 文档来自于“ JSON Document”&#xff0c;并非我们一般理解的 PDF&am…

人机交互学习-8 交互设计模型与理论

交互设计模型与理论 预测模型GOMS模型GOMS全称GoalsOperatorsMethodsSelection Rules 举例GOMS方法步骤GOMS模型分析 击键层次模型操作符使用方法放置M操作符的启发规则KLM分析KLM应用 Fitts定律三个指标a,b的确定说明Fitts定律建议Fitts定律应用 动态特性建模状态转移网三态模…

牛客网基础语法61~70题

牛客网基础语法61~70题&#x1f618;&#x1f618;&#x1f618; &#x1f4ab;前言&#xff1a;今天是咱们第七期刷牛客网上的题目。 &#x1f4ab;目标&#xff1a;可以掌握循环嵌套&#xff0c;逻辑思维更加清晰&#xff0c;对循环知识掌握熟练。 &#x1f4ab;鸡汤&#xf…

dp算法篇Day5

"生予希望&#xff0c;生予微光&#xff0c;生予一切无常" 21、乘积最大子数组 (1) 题目解析 一个正数&#xff0c;需要和正数相乘才能得到一个大的乘积&#xff0c;反之一个负数&#xff0c;需要和一个负数做乘积&#xff0c;才能 得到一个大的乘积。 解决子数组问…

Springboot程序开启远程DEBUG

一、远程debug的原理 Spring Boot程序远程debug的原理主要是通过在启动时指定JVM参数来启用远程调试模式&#xff0c;并在调试器中连接到程序所在的调试地址&#xff0c;从而实现对程序的远程调试。 具体步骤如下&#xff1a; 在运行Spring Boot程序时&#xff0c;在启动命令…

强化学习DDPG:Deep Deterministic Policy Gradient解读

1. DDPG DDPG方法相比于传统的PG算法&#xff0c;主要有三点改进&#xff1a; A. off-policy策略 传统PG算法一般是采用on-policy方法&#xff0c;其将整体强化学习过程分为多个epoch&#xff0c;在每个epoch完成一次policy模型和value模型更新&#xff0c;同时在每轮epoch都…

【Java高级语法】(五)字符串操作类String:几乎每天都会用到的String类,你还在踩坑吗?~

Java高级语法详解之字符串操作类String :one: 概念:two: 使用2.1 创建字符串对象2.2 字符串的比较2.3 字符串长度2.4 字符串连接2.5 字符串截取2.6 字符串的查找和替换2.7 字符串的切割和拆分2.8 字符串和其他类型的转换2.9 字符串的格式化2.10 字符串的判断2.11 手动入池2.12 …

202319读书笔记|《春之海终日优哉游哉:谢芜村俳句300》——远山峡谷间樱花绽放,宇宙在其中

202319读书笔记&#xff5c;《春之海终日优哉游哉&#xff1a;谢芜村俳句300》——远山峡谷间樱花绽放&#xff0c;宇宙在其中 与谢芜村&#xff0c;小林一茶&#xff0c;芭蕉&#xff0c;与谢野晶子&#xff0c;俳句都很赞&#xff0c;虽多本书中略有重复&#xff0c;但多多观…

【备战秋招】每日一题:4月15日美团春招第一题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第一题-字符串前缀 在线评测链接:P1235 题目内容 塔子哥是一名优秀的软件工程师&#xff0c;他的公司最近接到了一个新项目&#xff0c;需要在短时间内实现一个新的字符串…

微服务 springcloud 09.整合feign到项目一个子服务中

01.项目结构如下&#xff1a; 02.修改sp04-orderservice项目&#xff0c;添加feign&#xff0c;调用item service和user service 1.sp04-orderservice项目的pom.xml 添加以下依赖: actuator feign hystrix <?xml version"1.0" encoding"UTF-8"?>…

全链路压测演进之迭代式压测

目录 1.背景原因 2.压测流程改进分析 3.迭代式压测流程 4.全流程压测模式演进 5.压测模式对比 6.迭代式压测反馈效果 7.总结 1.背景原因 !! 做系统服务压测都是比较耗时耗人力的&#xff0c;特别是在生产环境上做压测&#xff0c;压测的时间都是在晚上23点后&#xff0c…

Linux之线程安全(上)

文章目录 前言一、预备知识1.线程的ID2.局部存储的验证3.线程的封装 二、线程安全问题1.抢票程序2.问题分析 三、Linux线程互斥1.概念临界资源临界区互斥原子性 2.互斥量概念接口 3.mutex的使用全局锁的使用局部锁的使用 总结 前言 本文从一个模拟生活中的抢票程序的例子引入线…

经典的设计模式22——职责链模式

文章目录 职责链模式 老感觉职责链模式和状态模式有点像&#xff0c;好像都能实现请假流程。百度来一波。 真是巧了&#xff0c;职责链&#xff0c;状态&#xff0c;策略&#xff0c;则三个长得好像。 职责链模式 定义&#xff1a; 使多个对象都有机会处理请求&#xff0c;从…

循环神经网络RNN用于分类任务

RNN是一类拥有隐藏状态&#xff0c;允许以前的输出可用于当前输入的神经网络&#xff0c; 输入一个序列&#xff0c;对于序列中的每个元素与前一个元素的隐藏状态一起作为RNN的输入&#xff0c;通过计算当前的输出和隐藏状态。当前的影藏状态作为下一个单元的输入... RNN的种类…

AMEYA:如何设计好DC-DC电源,注意事项有哪些

DC-DC变换器&#xff08;DC-DC converter&#xff09;是指在直流电路中将一个电压值的电能变为另一个电压值的电能的装置。DC-DC的layout非常重要&#xff0c;会直接影响到产品的稳定性与EMI效果。 DC-DC电源几点经验以及规则 1、处理好反馈环&#xff0c;反馈线不要走肖特基下…

基于JavaWeb的体育赛事平台的设计与实现

摘要 体育是随着社会生产力的发展而产生和发展的&#xff0c;在其漫长的历史中&#xff0c;由于社会、政治和经济发展的影响&#xff0c;其内容、形式、功能和操作方法不断变化。奥运会和世界杯等大型体育赛事代表着体育发展的顶峰&#xff0c;因为它们不仅给组织者带来了巨大…