阿里笔试 阿里笔试题 0421
笔试时间:2024年04月21日
历史笔试传送门:2023秋招笔试合集
第一题
题目
小红有n颗豆子,每颗豆子的美味度为ai,颜色为ci,现在小红想选择最多两种颜色,并吃完这两种颜色全部豆子。小红希望吃到的所有豆子美味度之和尽可能大,你能帮帮她吗?
输入描述
第一行输入一个正整数n,代表豆子的数量。接下来的n行,每行输入两个正整数ai, ci,代表每颗豆子的美味度和颜色。
输出描述
一个整数,代表小红可以吃到的豆子美味度最大的总和。
样例输入
4
100 1
20 5
30 5
40 1
样例输出
190
参考题解
模拟,简单模拟题,用map存储不同颜色的美味值之和,最后选两个美味值最大的加起来。
C++:[此代码未进行大量数据的测试,仅供参考]
#include<bits/stdc++.h> using namespace std; const int N = 1e5 +7, mod = 1e9 + 7; int n, m, t; typedef pair<int, int> PII; typedef long long LL; map<int , LL> mp; int main() { cin >> n; while (n -- ){ int a, c; cin >> a >> c; mp[c] += a; } vector<LL> res; for(auto [a, b]: mp) { res.push_back(b); } sort(res.begin(), res.end()); LL ans = 0; int cnt = 0; for(int i = res.size() - 1; i >= 0; i --) { ans += res[i]; cnt ++; if(cnt == 2) break; } cout << ans; return 0; }
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); Map<Integer, Long> mp = new HashMap<>(); for (int i = 0; i < n; i++) { int a = scanner.nextInt(); int c = scanner.nextInt(); mp.put(c, mp.getOrDefault(c, 0L) + a); } List<Long> res = new ArrayList<>(mp.values()); Collections.sort(res, Collections.reverseOrder()); long ans = 0; int cnt = 0; for (long val : res) { ans += val; cnt++; if (cnt == 2) break; } System.out.println(ans); scanner.close(); } }
Python:[此代码未进行大量数据的测试,仅供参考]
n = int(input()) mp = {} for _ in range(n): a, c = map(int, input().split()) if c in mp: mp[c] += a else: mp[c] = a res = sorted(mp.values(), reverse=True) ans = 0 cnt = 0 for val in res: ans += val cnt += 1 if cnt == 2: break print(ans)
第二题
题目
小红最近在研究级数∑n=1∞ 1/(an2+bn+c)的收敛性问题, 请你帮帮小红。
输入描述
三个非负整数a,b,c,用空格隔开。
0<=a,b,c<=1000
保证a,b,c不同时为零。
输出描述
如果该级数收敛,请输出一个浮点数,代表最终收敛于哪个实数。你只需要保证和标准答案的相对误差不超过10^-7即可通过本题。如果该级数发散,则直接输出-1。
样例输入一
0 1 0
样例输出一
-1
样例输入二
1 0 0
样例输出二
1.644934067
参考题解
要使级数收敛
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024 BAT笔试合集 文章被收录于专栏
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。