2024届-OPPO(改编题)-第一套
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷学长刷题笔记
🍒 本专栏已收集
140+
套题 🍄 题面描述等均已改编,如果和你实际看到的题面描述不一样请理解,做法和题目本质基本不变。🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🎀 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:
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏短期内不再更新,请勿继续订阅