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

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-申请奖学金

在线评测链接:P1245

题目内容

塔子哥是一个热爱学习的大学生,他的梦想是成为一名优秀的算法竞赛高手。为了实现自己的梦想,他需要获得奖学金,以便有足够的时间和资金去参加各种比赛和训练。但是,塔子哥所在的学校对于奖学金的评定非常严格,要求塔子哥必须保持优异的成绩。

塔子哥总共修习了 n 门课程,每门课程都有一个学分 a_i,表示这门课程的重要程度。而这门课塔子哥的成绩是b_i,表示塔子哥在这门课程上的表现。塔子哥所在学校对于奖学金的评定非常简单:只要所有课程的均分不低于一个给定的标准 X ,而且没有任何课程挂科,就可以申请奖学金。均分是指所有课程的成绩按照学分加权的平均值,而一门课程挂科即该课成绩低于 60 分。

现在塔子哥想要知道,在每种课业情况下他能否申请奖学金。他会给你总共若干次询问,每次询问他会告诉你他修习了哪些课程,每门课程的学分和成绩,以及奖学金的评定标准 X 。你需要帮助塔子哥判断,在每次询问中,他是否满足申请奖学金的条件。

输入描述

第一行有一个正整数 T(1 \leq T \leq 100) ,表示询问次数;

对于每组询问中:

第一行有两个正整数 n(1\leq n \leq 10^2), X(1 \leq X \leq 100) 表示有几门课和评定标准;

第二行中有 n 个正整数 a_i 表示每一科的学分; (1 \leq a_i \leq 100)

第三四行有 n 个正整数 b_i 表示每一科的成绩。 (1 \leq b_i \leq 100)

输出描述

输出为对于每次询问,输出 Yes 或者 No 表示能或不能申请奖学金。

样例

输入

3
5 97
5 4 8 2 4
72 92 64 96 100
5 87
1 7 7 3 8
64 69 98 72 91
5 61
10 7 8 2 3
100 83 72 91 63

输出

No
No
Yes

思路

模拟

模拟题,累加学分加权总和并判断是否达到要求即可。

时间复杂度:O(n)

类似题目推荐

本题比较简单。

LeetCode

周赛/双周赛 第一题

Codefun2000

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

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

  3. P1166 美团 2023.04.08-第一题-换座位

  4. P1245 美团 2023.04.23-春招-第一题-申请奖学金

代码

CPP

#include <bits/stdc++.h>
using namespace std;
​
const int N = 110;
int a[N];
​
void solve() {
    int n, x, sum = 0, sums = 0;
    bool ok = true;
​
    cin >> n >> x;
​
    // 计算学分总和
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        sums += a[i];
    }
​
    // 计算学分×分数总和
    for (int i = 0; i < n; ++i) {
        int y; cin >> y;
        if (y < 60) ok = false;
        sum += y * a[i];
    }
​
    // 有小于 60 分的课程
    if (!ok) cout << "No\n";
    else {
        // 课程加权平均分小于 x
        if (sum < sums * x) cout << "No\n";
        else cout << "Yes\n";
    }
}
​
int main()
{
    int T = 1;
    cin >> T;
    while (T--) {
        solve();
    }
​
    return 0;
}

python

T = int(input())
while T > 0:
    n, x = map(int, input().split())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
​
    # 遍历找是否存在一门课程的分数小于 60 分
    ok = True
    for i in range(n):
        if b[i] < 60:
            ok = False
            break
​
    # 课程存在一门课程小于 60分
    if not ok:
        print("No")
    else:
        # 课程加权平均分小于 x
        if sum(a[i] * b[i] for i in range(n)) < sum(a) * x:
            print("No")
        else:
            print("Yes")
​
    T -= 1
​

Java

import java.util.*;
​
public class Main {
​
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
​
        int T = sc.nextInt();
        while (T-- > 0) {
            int n = sc.nextInt(), x = sc.nextInt();
            int[] a = new int[n];
            int[] b = new int[n];
​
            for (int i = 0; i < n; ++i) a[i] = sc.nextInt();
            for (int i = 0; i < n; ++i) b[i] = sc.nextInt();
​
            boolean ok = true;
            // 遍历找是否存在一门课程的分数小于 60 分
            for (int i = 0; i < n; ++i) {
                if (b[i] < 60) {
                    ok = false;
                    break;
                }
            }
​
            if (!ok) {
                // 课程存在一门课程小于 60分
                System.out.println("No");
            } else {
                int sum = 0;
                int sumc = 0;
                // 计算a[i] * b[i] 总和以及学分总和
                for (int i = 0; i < n; ++i) {
                    sum += a[i] * b[i];
                    sumc += a[i];
                }
                if (sum < sumc * x) {
                    // 课程加权平均分小于 x
                    System.out.println("No");
                } else {
                    System.out.println("Yes");
                }
            }
        }
    }
}

Go

package main
​
import "fmt"
​
const N = 110
​
func main() {
    var T int
    fmt.Scan(&T)
​
    for T > 0 {
        T -= 1
​
        var n, x int
        a := make([]int, N)
        fmt.Scan(&n, &x)
​
        sums := 0
        for i := 0; i < n; i++ {
            fmt.Scan(&a[i])
            sums += a[i]
        }
​
        ok := true
        sum := 0
        for i := 0; i < n; i++ {
            var y int
            fmt.Scan(&y)
            // 计算a[i] * b[i] 总和以及学分总和
            sum += a[i] * y
            // 遍历找是否存在一门课程的分数小于 60 分
            if y < 60 {
                ok = false
            }
        }
​
        if !ok {
            // 课程存在一门课程小于 60分
            fmt.Println("No")
        } else {
            // 课程加权平均分小于 x
            if sum < sums*x {
                fmt.Println("No")
            } else {
                fmt.Println("Yes")
            }
        }
    }
}
​

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');
    let T = parseInt(lines[0]);
​
    for (let i = 1, t = 1; i <= T; i++) {
        const [n, x] = lines[t++].trim().split(' ').map(Number);
        const a = lines[t++].trim().split(' ').map(Number);
        const b = lines[t++].trim().split(' ').map(Number);
​
        // 遍历找是否存在一门课程的分数小于 60 分
        let ok = true;
        for (let j = 0; j < n; j++) {
            if (b[j] < 60) {
                ok = false;
                break;
            }
        }
​
        // 课程存在一门课程小于 60 分
        if (!ok) {
            console.log("No");
        } else {
            // 课程加权平均分小于 x
            if (a.reduce((acc, cur, i) => acc + cur * b[i], 0) < sum(a) * x) {
                console.log("No");
            } else {
                console.log("Yes");
            }
        }
    }
});
​
function sum(arr) {
    return arr.reduce((acc, cur) => acc + cur, 0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔子哥学算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值