阿里笔试 阿里笔试题 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多种语言版本,持续更新中。