为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-申请奖学金
在线评测链接: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); }