【秋招突围】2024届秋招笔试-OPPO笔试题-第一套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新 OPPO 春秋招笔试题**汇总~

👏 感谢大家的订阅➕ 和 喜欢💗

✨ 笔试合集传送们 -> 🧷春秋招笔试合集

alt

🎀 01.K小姐的快速库存管理系统

问题描述

K小姐经营着一家小商店,最近她想开发一个快速库存管理系统。商店中有 n n n 种商品,每种商品的初始数量记录在数组 a a a 中。

接下来的 k k k 天中,每天都会有一些商品的数量发生变化。第 i i i 天会有一条形如 ( u , v ) (u, v) (u,v) 的操作,表示将第 u u u 种商品的数量变为 v v v

为了实时监控库存状况,K小姐希望在每次操作后快速得到当前所有商品数量的总和。你能帮助她完成这个库存管理系统吗?

输入格式

第一行包含两个正整数 n n n k k k,表示商品种类数和操作天数。

第二行包含 n n n 个正整数,第 i i i 个数表示初始时第 i i i 种商品的数量 a i a_i ai

接下来 k k k 行,每行包含两个正整数 u u u v v v,表示第 u u u 种商品的数量变为 v v v

输出格式

输出共 k k k 行,每行一个整数,表示每次操作后所有商品数量的总和。

样例输入

5 4
1 2 3 4 5
1 2
3 2
4 2
5 2

样例输出

16
15
13
10

数据范围

  • 3 ≤ n ≤ 1 0 6 3 \leq n \leq 10^6 3n106
  • 1 ≤ k ≤ 1 0 6 1 \leq k \leq 10^6 1k106
  • 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1ai109
  • 1 ≤ u ≤ n 1 \leq u \leq n 1un
  • 1 ≤ v ≤ 1 0 9 1 \leq v \leq 10^9 1v109

题解

本题可以使用前缀和的思想来解决。我们可以先预处理出初始时所有商品数量的总和 s u m sum sum,然后在每次操作时,先将 s u m sum sum 减去被修改商品的原数量,再加上修改后的数量,即可得到操作后的商品总数量。

具体步骤如下:

  1. 读入商品种类数 n n n 和操作天数 k k k

  2. 读入初始商品数量数组 a a a,并计算初始商品总数量 s u m sum sum

  3. 对于每次操作 ( u , v ) (u, v) (u,v):

    • s u m sum sum 减去第 u u u 种商品的原数量 a [ u ] a[u] a[u]
    • 将第 u u u 种商品的数量修改为 v v v,即 a [ u ] = v a[u] = v a[u]=v
    • s u m sum sum 加上修改后的数量 a [ u ] a[u] a[u]
    • 输出当前的商品总数量 s u m sum sum

时间复杂度为 O ( n + k ) O(n + k) O(n+k),空间复杂度为 O ( n ) O(n) O(n)

参考代码

  • 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 -= 1sum -= a[u]a[u] = vsum += 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决定在花园中的某个位置 P ( x , y ) P(x, y) P(x,y) 安装一个圆形喷水器,使其能够完全覆盖矩形喷水器所在的区域。

给定矩形喷水器的对角线坐标 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2),以及圆形喷水器的安装位置 P ( x , y ) P(x, y) P(x,y),请你计算圆形喷水器的最小面积。

输入格式

第一行包含四个实数 x 1 x_1 x1 y 1 y_1 y1 x 2 x_2 x2 y 2 y_2 y2,分别表示矩形喷水器对角线上两个点的坐标。

第二行包含两个实数 x x x y y y,表示圆形喷水器的安装位置坐标。

输入坐标的绝对值均小于 1 0 5 10^5 105

输出格式

输出一个实数 S S S,表示覆盖矩形喷水器所需的最小圆形喷水器面积。如果答案的绝对或相对误差不超过 1 0 − 6 10^{-6} 106,则视为正确。

样例输入

1 1 2 2
0 0

样例输出

25.1327412287

数据范围

输入坐标的绝对值均小于 1 0 5 10^5 105

题解

本题可以通过以下步骤求解:

  1. 根据矩形喷水器的对角线坐标 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2),计算出矩形喷水器的另外两个顶点坐标 ( x 3 , y 3 ) (x_3, y_3) (x3,y3) ( x 4 , y 4 ) (x_4, y_4) (x4,y4)
  2. 计算圆形喷水器中心点 P ( x , y ) P(x, y) P(x,y) 到矩形喷水器四个顶点的距离,取其中的最大值作为圆形喷水器的半径 r r r
  3. 根据公式 S = π r 2 S = \pi r^2 S=πr2 计算圆形喷水器的面积。

时间复杂度为 O ( 1 ) O(1) O(1),空间复杂度为 O ( 1 ) O(1) O(1)

参考代码

  • Python
from math import pix1, y1, x2, y2 = map(float, input().split())
x, y = map(float, input().split())x3, y3 = x1, y2
x4, y4 = x2, y1r = 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.5area = pi * r ** 2
print(f"{area:.10f}")
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double x1 = sc.nextDouble(), y1 = sc.nextDouble();double x2 = sc.nextDouble(), y2 = sc.nextDouble();double x = sc.nextDouble(), y = sc.nextDouble();double x3 = x1, y3 = y2;double x4 = x2, y4 = y1;double r = Math.max(Math.max(Math.pow(x1 - x, 2) + Math.pow(y1 - y, 2),Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2)),Math.max(Math.pow(x3 - x, 2) + Math.pow(y3 - y, 2),Math.pow(x4 - x, 2) + Math.pow(y4 - y, 2)));double area = Math.PI * r;System.out.printf("%.10f", area);}
}
  • Cpp
#include <iostream>
#include <cmath>
#include <algorithm>using namespace std;int main() {double x1, y1, x2, y2, x, y;cin >> x1 >> y1 >> x2 >> y2 >> x >> y;double x3 = x1, y3 = y2;double x4 = x2, y4 = y1;double r = max(max(pow(x1 - x, 2) + pow(y1 - y, 2),pow(x2 - x, 2) + pow(y2 - y, 2)),max(pow(x3 - x, 2) + pow(y3 - y, 2),pow(x4 - x, 2) + pow(y4 - y, 2)));double area = M_PI * r;printf("%.10f\n", area);return 0;
}

💡 03.最短K0子串

问题描述

LYA是一名软件工程师,她正在研究一种特殊的字符串,称为K0串。一个字符串如果它的所有字符的ASCII码值乘积转换为二进制后,末尾至少有 k k k 个连续的0,则称该字符串为K0串。

现在给定一个长度为 n n n 的字符串 s s s,请你帮助LYA找出 s s s 的所有子串中,最短的K0子串的长度。

输入格式

第一行包含两个正整数 n n n k k k,分别表示字符串 s s s 的长度和要求的末尾连续0的个数。

第二行包含一个长度为 n n n 的字符串 s s s

输出格式

输出一个整数,表示最短K0子串的长度。如果不存在K0子串,则输出 − 1 -1 1

样例输入

7 3
abcdefg

样例输出

3

数据范围

3 ≤ n ≤ 1 0 5 3 \leq n \leq 10^5 3n105
1 ≤ k ≤ 1 0 5 1 \leq k \leq 10^5 1k105
字符串 s s s 仅包含小写字母。

题解

本题可以使用双指针+前缀和的思想来解决。我们可以用一个数组 c o u n t count count 来维护以每个字符结尾的子串中,二进制末尾连续0的个数。

具体地,我们从左到右遍历字符串 s s s,对于每个位置 i i i,我们计算以 s [ i ] s[i] s[i] 结尾的子串的 c o u n t count count 值,即 c o u n t [ i ] = c o u n t [ i − 1 ] + t r a i l i n g _ z e r o s ( s [ i ] ) count[i] = count[i-1] + trailing\_zeros(s[i]) count[i]=count[i1]+trailing_zeros(s[i]),其中 t r a i l i n g _ z e r o s ( x ) trailing\_zeros(x) trailing_zeros(x) 表示 x x x 的二进制表示中末尾连续0的个数。

然后我们使用双指针 l e f t left left r i g h t right right 来枚举所有的子串。初始时 l e f t = r i g h t = 0 left=right=0 left=right=0,我们不断地右移 r i g h t right right,并更新 c o u n t [ r i g h t ] count[right] count[right] 的值。当 c o u n t [ r i g h t ] − c o u n t [ l e f t − 1 ] ≥ k count[right]-count[left-1] \geq k count[right]count[left1]k 时,说明子串 s [ l e f t , r i g h t ] s[left,right] s[left,right] 是一个K0串,我们更新答案,并右移 l e f t left left,直到上述不等式不成立。然后继续右移 r i g h t right right,直到遍历完整个字符串。

最后,如果没有找到K0子串,则输出 − 1 -1 1,否则输出最短K0子串的长度。

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( n ) O(n) O(n)

参考代码

  • Python
n, k = map(int, input().split())
s = input()def trailing_zeros(x):cnt = 0while x > 0 and (x & 1) == 0:cnt += 1x >>= 1return cntcount = [0] * (n + 1)
for i in range(1, n + 1):count[i] = count[i - 1] + trailing_zeros(ord(s[i - 1]))left = right = 0
min_len = float('inf')
while right < n:while right < n and count[right + 1] - count[left] < k:right += 1if right == n or count[right + 1] - count[left] >= k:min_len = min(min_len, right - left + 1)left += 1print(min_len if min_len != float('inf') else -1)
  • 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();String s = sc.next();int[] count = new int[n + 1];for (int i = 1; i <= n; i++) {count[i] = count[i - 1] + trailingZeros(s.charAt(i - 1));}int left = 0, right = 0;int minLen = Integer.MAX_VALUE;while (right < n) {while (right < n && count[right + 1] - count[left] < k) {right++;}if (count[right + 1] - count[left] >= k) {minLen = Math.min(minLen, right - left + 1);}left++;}System.out.println(minLen == Integer.MAX_VALUE ? -1 : minLen);}private static int trailingZeros(char c) {int x = (int) c;int cnt = 0;while (x > 0 && (x & 1) == 0) {cnt++;x >>= 1;}return cnt;}
}
  • Cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;int trailingZeros(char c) {int x = (int) c;int cnt = 0;while (x > 0 && (x & 1) == 0) {cnt++;x >>= 1;}return cnt;
}int main() {int n, k;string s;cin >> n >> k >> s;vector<int> count(n + 1);for (int i = 1; i <= n; i++) {count[i] = count[i - 1] + trailingZeros(s[i - 1]);}int left = 0, right = 0;int minLen = INT_MAX;while (right < n) {while (right < n && count[right + 1] - count[left] < k) {right++;}if (count[right + 1] - count[left] >= k) {minLen = min(minLen, right - left + 1);}left++;}cout << (minLen == INT_MAX ? -1 : minLen) << endl;return 0;
}

alt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489440.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DVWA中命令执行漏洞细说

在攻击中&#xff0c;命令注入是比较常见的方式&#xff0c;今天我们细说在软件开发中如何避免命令执行漏洞 我们通过DVWA中不同的安全等级来细说命令执行漏洞 1、先调整DVWA的安全等级为Lower,调整等级在DVWA Security页面调整 2、在Command Injection页面输入127.0.0.1&…

【计算机网络】物理层(第2章)大纲(共70+页)

最后只复习了1.5天&#xff0c;应用层简单过了一遍。 本来是mindmap的&#xff0c;但是太大了只能导出成提纲了&#xff0c;凑合看吧orz。 如果你找我要源文件&#xff0c;最好是在2024年&#xff0c;不然我可能就找不到了&#xff08;&#xff09;。

C# Task.WaitAll 的用法

目录 简介 1.WaitAll(Task[], Int32, CancellationToken) 2.WaitAll(Task[]) 3.WaitAll(Task[], Int32) 4.WaitAll(Task[], CancellationToken) 5.WaitAll(Task[], TimeSpan) 结束 简介 Task.WaitAll 是 C# 中用于并行编程的一个的方法&#xff0c;它属于 System.Threa…

蓝牙耳机百元之内怎么选?四款百元精品爆款蓝牙耳机盘点

在蓝牙耳机的海洋中&#xff0c;百元价位仿佛是一片神秘的绿洲&#xff0c;既诱人又充满未知&#xff0c;如何在众多选项中挑选出真正的精品呢&#xff1f;蓝牙耳机百元之内怎么选&#xff1f;这是许多消费者的共同疑问&#xff0c;带着这个疑问&#xff0c;作为蓝牙耳机发烧党…

2024101读书笔记|《飞花令·冬》——三冬雪压千年树,四月花繁百尺藤

2024101读书笔记|《飞花令冬》——三冬雪压千年树&#xff0c;四月花繁百尺藤 《飞花令冬&#xff08;中国文化古典诗词品鉴&#xff09;》素心落雪 编著&#xff0c;飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xff0c;类似于行酒令&#xff0c;是文人们…

在Mac上恢复永久删除的Excel文件,有效方法学习!

丢失 Mac 上的重要 Excel 文件可能是一场噩梦&#xff0c;尤其是如果它们被永久删除的话。相信我&#xff0c;这种感觉是没人愿意经历的。但不要惊慌&#xff1b;您可以选择恢复这些文件。无论是通过垃圾箱删除还是由于系统错误意外丢失&#xff0c;都有多种方法可以恢复您的数…

STM32嵌入式人工智能边缘计算应用教程

目录 引言环境准备边缘计算系统基础代码实现&#xff1a;实现嵌入式人工智能边缘计算系统 4.1 数据采集模块 4.2 数据处理与推理模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;边缘计算与优化问题解决方案与优化收尾与总结 1. 引言 嵌入式人工智…

深度学习的前沿主题:GANs、自监督学习和Transformer模型

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f48e;1. 介绍 深度学习在人工智能领域中占据了重要地位&#xff0c;特别是生成对抗网络&#xff08;GANs&#xff09;、自监督学习和Transformer模型的出现&#xff0c;推动了图像生成、自然语言处理等多个领域的创…

Docker Desktop安装(通俗易懂)

1、官网 https://www.docker.com/products/docker-desktop/ 2、阿里云镜像 docker-toolbox-windows-docker-for-windows安装包下载_开源镜像站-阿里云 1. 双击安装文件勾选选项 意思就是&#xff1a; Use WSL 2 instead of Hyper-V (recommended) : 启用虚拟化&#xff0c;…

2024年【非高危行业生产经营单位主要负责人解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力考试报名是安全生产模拟考试一点通生成的&#xff0c;非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力证模拟考试题库…

基于DMASM镜像的DMDSC共享存储集群部署

DMv8镜像模式共享存储集群部署 环境说明 操作系统&#xff1a;centos7.6 服务器&#xff1a;2台虚拟机 达梦数据库版本&#xff1a;达梦V8 安装前准备工作 参考文档《DM8共享存储集群》-第11、12章节 参考文档《DM8_Linux服务脚本使用手册》 1、系统环境(all nodes) 1…

Go-Zero 数据库实战:配置、建模与业务逻辑一体化

前言 在之前的几篇文章中&#xff0c;我们深入学习了Go-Zero框架的实战应用&#xff0c;包括模板定制化、API定义、抽奖算法设计等内容。本文将继续探索Go-Zero框架的实践技巧&#xff0c;并介绍一些与数据库操作相关的主题。 在现代应用程序开发中&#xff0c;对数据库的操作…

matlab仿真 数字基带传输(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第六章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all nsamp10;%每个脉冲信号的抽样点数 s0ones(1,nsamp);%基带脉冲信号&#xff0c;其中s0的信号为1,1,1,1,1,1,1,1,1,1 …

【笔记】缺少DLL文件 Cannot import dll:C\Users\xxx\...\madd.dll

报错 原因 杀毒软件拦截了程序解决&#xff1a;关闭该软件 &#xff08;1&#xff09;电脑右下角&#xff08;↑&#xff09;&#xff0c;找到杀毒软件&#xff08;我电脑是 联想杀毒Plus&#xff09; &#xff08;2&#xff09;找到 “更改设置” - 选择 “实时扫描” &#…

vue3 使用Mock

官网: http://mockjs.com/ 安装 npm install mockjs -Dsteps1: main.js 文件引入 import /api/mock.jssteps2: src/api/mock.js import Mock from mockjs import homeApi from ./mockData/home /*** 1.拦截的路径:mock拦截了正常NetWork/网络请求,数据正常响应* 2.方法* …

【计算机网络】DHCP实验

一&#xff1a;实验目的 1&#xff1a;深入理解DHCP&#xff08;动态主机配置协议&#xff09;的工作原理和数据包交换过程。 2&#xff1a;掌握如何通过命令行释放和重新获取IP地址&#xff0c;并通过抓包软件分析DHCP消息的具体内容。 二&#xff1a;实验仪器设备及软件 硬…

猫头虎 分享已解决Error || pip install 出现 error: subprocess-exited-with-error 错误的解决办法

&#x1f42f; 猫头虎 分享已解决Error || pip install 出现 error: subprocess-exited-with-error 错误的解决办法 &#x1f680; 摘要 &#x1f31f; 在人工智能领域开发中&#xff0c;我们常常需要使用不同的包管理工具来管理我们的开发环境。作为技术博主猫头虎&#xff…

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网&#xff0c;在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载&#xff0c;因为服务器在国外&#xff0c;国内不支持&#xff0c;所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…

【Node.js入门精要】从零开始的开发之旅

说明文档&#xff1a;Node.js 教程_w3cschool 概念 Node.js 是一个开源、跨平台的 JavaScript 运行时环境&#xff0c;基于 Chrome 的 V8 引擎构建&#xff0c;专为构建高性能和可扩展的网络应用程序而设计的服务端语言。它采用事件驱动、非阻塞 I/O 模型&#xff0c;能够处理大…

气膜拳击馆:未来拳击场馆的最佳选择—轻空间

在现代城市化进程中&#xff0c;体育场馆的建设越来越受到关注。传统建筑成本高、施工周期长&#xff0c;并且在环境控制和节能环保方面存在诸多限制。而气膜建筑作为一种新型建筑形式&#xff0c;以其独特的优势和高性价比&#xff0c;逐渐成为各类体育场馆建设的最佳选择。今…