秋招突围】2024届秋招-OPPO笔试题-第一套
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新 OPPO 春秋招笔试题 汇总`
📝 今天
OPPO
的2025届秋招
也是正式拉开帷幕啦👏 感谢大家的订阅➕ 和 喜欢💗
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🎀 01.K小姐的快速库存管理系统
问题描述
K小姐经营着一家小商店,最近她想开发一个快速库存管理系统。商店中有 种商品,每种商品的初始数量记录在数组 中。
接下来的 天中,每天都会有一些商品的数量发生变化。第 天会有一条形如 的操作,表示将第 种商品的数量变为 。
为了实时监控库存状况,K小姐希望在每次操作后快速得到当前所有商品数量的总和。你能帮助她完成这个库存管理系统吗?
输入格式
第一行包含两个正整数 和 ,表示商品种类数和操作天数。
第二行包含 个正整数,第 个数表示初始时第 种商品的数量 。
接下来 行,每行包含两个正整数 和 ,表示第 种商品的数量变为 。
输出格式
输出共 行,每行一个整数,表示每次操作后所有商品数量的总和。
样例输入
5 4
1 2 3 4 5
1 2
3 2
4 2
5 2
样例输出
16
15
13
10
数据范围
题解
本题可以使用前缀和的思想来解决。我们可以先预处理出初始时所有商品数量的总和 ,然后在每次操作时,先将 减去被修改商品的原数量,再加上修改后的数量,即可得到操作后的商品总数量。
具体步骤如下:
-
读入商品种类数 和操作天数 。
-
读入初始商品数量数组 ,并计算初始商品总数量 。
-
对于每次操作 :
- 将 减去第 种商品的原数量 。
- 将第 种商品的数量修改为 ,即 。
- 将 加上修改后的数量 。
- 输出当前的商品总数量 。
时间复杂度为 ,空间复杂度为 。
参考代码
- Python
n, k = map(int, input().split())
a = list(map(int, input().split()))
sum = 0
for i in range(n):
sum += a[i]
for i in range(k):
u, v = map(int, input().split())
u -= 1
sum -= a[u]
a[u] = v
sum += a[u]
print(sum)
- Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
long[] a = new long[n];
long sum = 0;
for (int i = 0; i < n; i++) {
a[i] = sc.nextLong();
sum += a[i];
}
for (int i = 0; i < k; i++) {
int u = sc.nextInt() - 1;
long v = sc.nextLong();
sum -= a[u];
a[u] = v;
sum += a[u];
System.out.println(sum);
}
}
}
- Cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
vector<long long> a(n);
long long sum = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
sum += a[i];
}
for (int i = 0; i < k; i++) {
int u;
long long v;
cin >> u >> v;
u--;
sum -= a[u];
a[u] = v;
sum += a[u];
cout << sum << "\n";
}
return 0;
}
📝 02.LYA的圆形喷水器
问题描述
LYA在他的花园中安装了一个矩形喷水器,喷水器的边分别与花园的长和宽平行。为了确保花园的每个角落都能被浇灌到,LYA决定在花园中的某个位置 安装一个圆形喷水器,使其能够完全覆盖矩形喷水器所在的区域。
给定矩形喷水器的对角线坐标 和 ,以及圆形喷水器的安装位置 ,请你计算圆形喷水器的最小面积。
输入格式
第一行包含四个实数 、、、,分别表示矩形喷水器对角线上两个点的坐标。
第二行包含两个实数 、,表示圆形喷水器的安装位置坐标。
输入坐标的绝对值均小于 。
输出格式
输出一个实数 ,表示覆盖矩形喷水器所需的最小圆形喷水器面积。如果答案的绝对或相对误差不超过 ,则视为正确。
样例输入
1 1 2 2
0 0
样例输出
25.1327412287
数据范围
输入坐标的绝对值均小于 。
题解
本题可以通过以下步骤求解:
- 根据矩形喷水器的对角线坐标 和 ,计算出矩形喷水器的另外两个顶点坐标 和 。
- 计算圆形喷水器中心点 到矩形喷水器四个顶点的距离,取其中的最大值作为圆形喷水器的半径 。
- 根据公式 计算圆形喷水器的面积。
时间复杂度为 ,空间复杂度为 。
参考代码
- Python
from math import pi
x1, y1, x2, y2 = map(float, input().split())
x, y = map(float, input().split())
x3, y3 = x1, y2
x4, y4 = x2, y1
r = max(
(x1 - x) ** 2 + (y1 - y) ** 2,
(x2 - x) ** 2 + (y2 - y) ** 2,
(x3 - x) ** 2 + (y3 - y) ** 2,
(x4 - x) ** 2 + (y4 - y) ** 2
) ** 0.5
area = pi * r ** 2
print(f"{area:.10f}")
- Java
import java.util.Scanner;
publi
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的