为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-申请奖学金
在线评测链接:P1245
题目内容
塔子哥是一个热爱学习的大学生,他的梦想是成为一名优秀的算法竞赛高手。为了实现自己的梦想,他需要获得奖学金,以便有足够的时间和资金去参加各种比赛和训练。但是,塔子哥所在的学校对于奖学金的评定非常严格,要求塔子哥必须保持优异的成绩。
塔子哥总共修习了 n 门课程,每门课程都有一个学分 ,表示这门课程的重要程度。而这门课塔子哥的成绩是
,表示塔子哥在这门课程上的表现。塔子哥所在学校对于奖学金的评定非常简单:只要所有课程的均分不低于一个给定的标准 X ,而且没有任何课程挂科,就可以申请奖学金。均分是指所有课程的成绩按照学分加权的平均值,而一门课程挂科即该课成绩低于 60 分。
现在塔子哥想要知道,在每种课业情况下他能否申请奖学金。他会给你总共若干次询问,每次询问他会告诉你他修习了哪些课程,每门课程的学分和成绩,以及奖学金的评定标准 X 。你需要帮助塔子哥判断,在每次询问中,他是否满足申请奖学金的条件。
输入描述
第一行有一个正整数 T() ,表示询问次数;
对于每组询问中:
第一行有两个正整数 n(1, X(
) 表示有几门课和评定标准;
第二行中有 n 个正整数 a_i 表示每一科的学分; ()
第三四行有 n 个正整数 b_i 表示每一科的成绩。 ()
输出描述
输出为对于每次询问,输出 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
-
美的 P1232. 2023.04.19-笔试-第一题-交换数值
-
P1174 华为od 2023.04.08--第一题-箱子之形摆放
-
P1166 美团 2023.04.08-第一题-换座位
-
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);
}



















