【AI/算法类】OPPO 2025届秋招笔试题(B卷)

目录

  • 1. 第一题
  • 2. 第二题
  • 3. 第三题

⏰ 时间:2024/08/10
🔄 输入输出:ACM格式
⏳ 时长:2h

本试卷还有选择题部分,但这部分比较简单就不再展示。

1. 第一题

小O有一个正整数 x x x,他想知道,第一个不小于 x x x 的素数是几,请你帮帮他吧。

输入描述

输入包含一行一个正整数 x ( 1 < x < 1 0 8 ) x\,(1<x< 10^8) x(1<x<108),表示小O拥有的正整数。

输出描述

输出包含一行一个正整数,表示不小于 x x x 的最小素数。

题解

暴力遍历即可。

#include <bits/stdc++.h>using namespace std;bool isPrime(int n) {if (n <= 1) return false;if (n <= 3) return true;if (n % 2 == 0 || n % 3 == 0) return false;for (int i = 5; i * i <= n; i += 6) {if (n % i == 0 || n % (i + 2) == 0) return false;}return true;
}int main() {int x;cin >> x;while (!isPrime(x)) {x++;}cout << x << endl;return 0;
}

2. 第二题

小O面前有 n n n 堆糖果,编号从 1 1 1 n n n,Alice和Bob将轮流拿走编号最小的糖果堆中的所有糖果,具体的:Alice 首先会拿走第一堆,然后Bob拿走第二堆,然后Alice拿走第三堆…直到 n n n 堆糖果全都被拿完为止。

小O现在希望 Alice 和 Bob 两人的糖果数量之差尽可能小(即如果Alice糖果数量为 x x x, Bob糖果数量为 y y y,他想使得 ∣ x − y ∣ |x-y| xy 的值尽可能小),为此他可以最多提前拿走一堆糖果(当然拿走后,位于这堆糖果之后的所有糖果编号也会减一)。

请你帮他求出这个最小值吧。

输入描述

第一行输入一个整数 n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 ) n\,(1\leq n\leq 2\cdot 10^5) n(1n2105) 代表糖果的堆数。
第二行输入 n n n 个整数 a 1 , a 2 , . . . , a n ( 1 ≤ a i ≤ 1 0 9 ) a_1,a_2,...,a_n\,(1\leq a_i\leq10^9) a1,a2,...,an(1ai109) 代表每一堆糖果的数量。

输出描述

在一行上输出一个整数,代表两人糖果数量之差的最小值。

题解

在小O拿走之前,Alice的序列是1、3、5、7等,为奇数序列,Bob的序列是2、4、6、8等,为偶数序列。

考虑一个 n = 9 n=9 n=9 的简单情形,假设小O拿走第 5 5 5 个,那么剩下的糖果堆为 12346789 1 2 3 4 6 7 8 9 12346789,Alice的序列为 1368 1 3 6 8 1368,Bob的序列为 2479 2 4 7 9 2479,可以发现,以 5 5 5 为分界点,Alice的序列中 5 5 5 左边的取的都是奇数, 5 5 5 右边的都是偶数。Bob序列中 5 5 5 左边的都是偶数, 5 5 5 右边的都是奇数。即无论是Alice还是Bob,位于分界点两边的元素下标奇偶性相反。

很显然我们需要遍历小O的位置,那么留给我们处理的时间就只有 O ( log ⁡ n ) O(\log n) O(logn)了,我们可以利用「前缀和」的思想,预处理出四个数组:

  • left_odd[i] 代表的是 [1, i] 区间,所有下标为奇数的元素和。
  • left_even[i] 代表的是 [1, i] 区间,所有下标为偶数的元素和。
  • right_odd[i] 代表的是 [i, n] 区间,所有下标为奇数的元素和。
  • right_even[i] 代表的是 [i, n] 区间,所有下标为偶数的元素和。

在遍历小O的位置 i i i 时,Alice的糖果数量为 left_odd[i]+right_even[i],Bob的糖果数量为 left_even[i]+right_odd[i]

#include <bits/stdc++.h>using namespace std;
using i64 = long long;void find_min(int n, vector<i64>& a) {if (n == 1) {cout << 0 << endl;return;}if (n == 2) {cout << min({a[0], a[1]}) << endl;return;}vector<i64> left_odd(n + 2);vector<i64> left_even(n + 2);vector<i64> right_odd(n + 2);vector<i64> right_even(n + 2);for (int i = 1; i <= n; i++) {left_odd[i] = left_odd[i - 1];left_even[i] = left_even[i - 1];if (i % 2) left_odd[i] += a[i];else left_even[i] += a[i];}for (int i = n; i; i--) {right_odd[i] = right_odd[i + 1];right_even[i] = right_even[i + 1];if (i % 2) right_odd[i] += a[i];else right_even[i] += a[i];}i64 min_diff = LLONG_MAX;for (int i = 1; i <= n; i++) {i64 a = left_odd[i] + right_even[i];i64 b = left_even[i] + right_odd[i];min_diff = min(min_diff, abs(a - b));}cout << min_diff << endl;
}int main() {int n;cin >> n;vector<i64> a(n + 1);for (int i = 1; i <= n; i++) {cin >> a[i];}find_min(n, a);return 0;
}

3. 第三题

小O有一个数字串,小O希望把这个数字串分割成两个不含前导零的数字串,使得前半部分可以被 x x x 整除,后半部分可以被 y y y 整除。请你帮助小O找到一种分割方法。

输入描述

第一行输入一个长度不小于 2 2 2、不超过 1 0 5 10^5 105,且仅由数字字符构成的字符串 s s s
第二行输入两个整数 x x x y ( 1 ≤ x , y ≤ 1 0 5 ) y\,(1\leq x,y\leq 10^5) y(1x,y105) 代表题中所述的除数。

输出描述

在一行上输出两个数字串 t 1 t_1 t1 t 2 t_2 t2,第一个数字串表示分割出的前半部分,第二个数字串表示分割出的后半部分,且满足 s = t 1 + t 2 s=t_1+t_2 s=t1+t2
如果不存在这样的分割方法,直接输出 − 1 -1 1
如果有多种合法答案,您可以输出任意一种。

题解

假设下标从 1 1 1 开始。

和第二题一样,同样是遍历分割的位置,我们同样要在 O ( log ⁡ n ) O(\log n) O(logn) 的时间内完成计算。如果使用py的切片计算,必然会超时。我们可以使用第二题的思想,即开一个前后缀数组。prefix[i] 代表的是 s[1..i] 构成的数字除以 x x x 的余数,suffix[i] 代表的是 s[i...n] 构成的数字除以 y y y 的余数。因此位置 k k k 是合理的分割当且仅当 prefix[k]==0suffix[k+1]==0

#include <bits/stdc++.h>using namespace std;void solve(string& s, int x, int y) {int n = s.length();s = " " + s;vector<int> prefix(n + 2);vector<int> suffix(n + 2);int cur = 0;for (int i = 1; i <= n; i++) {cur = (cur * 10 + (s[i] - '0')) % x;prefix[i] = cur;}cur = 0;int multi = 1;for (int i = n; i; i--) {cur = (cur + (s[i] - '0') * multi) % y;suffix[i] = cur;multi = (multi * 10) % y;}for (int i = 1; i < n; i++) {if (prefix[i] == 0 && suffix[i + 1] == 0) {cout << s.substr(1, i) << ' ' << s.substr(i + 1) << endl;return;}}cout << -1 << endl;
}int main() {string s;cin >> s;int x, y;cin >> x >> y;solve(s, x, y);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽卡机小程序,开启全新拆卡乐趣

近段时间&#xff0c;盲盒卡牌市场异常火爆&#xff0c;最近爆火的“小马宝莉”系列卡牌就深受消费者的喜爱&#xff0c;受到了广泛关注&#xff0c;同时也推动了卡牌市场的快速发展&#xff01;盲盒卡牌拥有隐藏款卡牌和限量款卡牌&#xff0c;具有非常大的收藏价值&#xff0…

使用Java调用Apache commons-text求解字符串相似性实战

目录 前言 一、字符串距离的几种计算方法 1、Levenshtein 距离 2、Overlap Coefficient计算 3、Q-gram Matching 4、余弦相似性计算 二、基于余弦相似性的基地名称对比 1、加载百科中的基地信息列表 2、设置忽略词列表 3、将数据库地名和Excel进行对比 三、总结 前言…

从力扣中等+困难题+表白HTML测试 -- 文心快码(Baidu Comate)

0 写在前面 官网地址&#xff1a;Baidu Comate Step1 打开文心快码&#xff08;Baidu Comate&#xff09;官网&#xff0c;点击「免费使用」/「下载安装」 Step2 可以根据官网步骤快速唤起VS Code&#xff1b; 也可以直接在VS Code、Visual Studio扩展管理搜索“文心快码”/…

如何用OceanBase实现HBase架构升级

随着数据量的爆炸性增长&#xff0c;特别是半结构化和非结构化数据的涌现&#xff0c;传统关系型数据库如 MySQL 遭遇了前所未有的挑战。这一背景下&#xff0c;为非结构化数据管理而生的 NoSQL 数据库&#xff0c;以及旨在解决海量数据存储难题的分布式技术应运而生&#xff0…

导出word格式的Javadoc(可用于快速生成项目详细设计文档)

导出word格式的Javadoc ​ 最近要编写项目详细设计文档&#xff0c;作为程序员当然想看看有没有能够自动生成的办法&#xff0c;生成详细设计文档&#xff0c;然后再在生成的基础上略做修改就好了&#xff08;偷懒大法~&#xff09;&#xff0c;还真有&#xff0c;特此分享&am…

理解Pytorch中的collate_fn函数

PyTorch中的DataLoader是最常用的类之一&#xff0c;这个类有很多参数&#xff08;14 个&#xff09;&#xff0c;但大多数情况下&#xff0c;你可能只会使用其中的三个&#xff1a;dataset、shuffle 和 batch_size。其中collate_fn是比较少用的函数&#xff0c;这对初学者来说…

Linux线程间通信学习记录(线程同步)

0.线程间通信的方法 &#xff08;1&#xff09;.全局变量&#xff08;要结合同步机制&#xff09; &#xff08;2&#xff09;.信号量 &#xff08;3&#xff09;.P操作 &#xff08;4&#xff09;.V操作 一.线程同步 同步&#xff1a;指的是多个任务按照约定的先后次序相互…

Visual C++ 2010 学习版

这个版本很好用。 在这里放一个链接&#xff0c;做个备份。 这个版本是承前启后的版本&#xff0c;非常的重要。 一、使用VC2010 这个版本创建的解决方案可以在VS2010~VS2022版本中打开&#xff0c;反之也行。 二、使用VC2010 可以编绎VC6.0 ~VC2008的项目。可以使用现成的…

灵办AI助手Chrome插件全面评测:PC Web端的智能办公利器

探索灵办AI助手在Mac OS上的高效表现&#xff0c;支持多款主流浏览器&#xff0c;助你轻松应对办公挑战 文章目录 探索灵办AI助手在Mac OS上的高效表现&#xff0c;支持多款主流浏览器&#xff0c;助你轻松应对办公挑战摘要引言开发环境介绍核心功能评测1. 网页翻译与双语对照 …

Rancher 使用 Minio 备份 Longhorn 数据卷

0. 概述 Longhorn 支持备份到 NFS 或者 S3, 而 MinIO 就是符合 S3 的对象存储服务。通过 docker 部署 minio 服务&#xff0c;然后在 Longhorn UI 中配置备份服务即可。 1. MinIO 部署 1.1 创建备份目录 mkdir -p /home/longhorn-backup/minio/data mkdir -p /home/longhor…

RCE的另外一些绕过练习

目录 被过滤了flag怎么办 方法 结果 过滤了flag、php、system 方法一 结果 ​编辑 方法二 过滤了很多但是主要的就是过滤了空格 和 注意一下这个就行 方法一 方法二 相对于上面一道题来说多过滤了一个括号 方法一 被过滤了flag怎么办 <?php error_reportin…

Python3网络爬虫开发实战(10)模拟登录(需补充账号池的构建)

文章目录 一、基于 Cookie 的模拟登录二、基于 JWT 模拟登入三、账号池四、基于 Cookie 模拟登录爬取实战五、基于JWT 的模拟登录爬取实战六、构建账号池 很多情况下&#xff0c;网站的一些数据需要登录才能查看&#xff0c;如果需要爬取这部分的数据&#xff0c;就需要实现模拟…

K8S - ConfigMap的简介和使用

什么是configMap Kubernetes中的ConfigMap 是用于存储非敏感数据的API对象&#xff0c;用于将配置数据与应用程序的镜像分离。ConfigMap可以包含键值对、文件或者环境变量等配置信息&#xff0c;应用程序可以通过挂载ConfigMap来访问其中的数据&#xff0c;从而实现应用配置的…

ubuntu20 lightdm无法自动登录进入桌面

现象&#xff1a;在rk3568的板子上自己做了一个Ubuntu 20.04的桌面系统。配置lightdm自动登录桌面&#xff0c;配置方法如下&#xff1a; $ vim /etc/lightdm/lightdm.conf [Seat:*] user-sessionxubuntu autologin-userusername #修改成自动登录的用户名 greeter-show-m…

38-PCB布局实战实战及优化

1.先对布局好的器件进行锁定 1.根据模块化布局 2.电容尽量靠近ic附近&#xff0c;可以起到很好的滤波效果 3.复位按键尽量摆在容易按键的地方&#xff0c;比如周围 。。。。 最后进行对齐

【OCR 学习笔记】二值化——局部阈值方法

二值化——局部阈值方法 自适应阈值算法Niblack算法Sauvola算法 自适应阈值算法 自适应阈值算法1用到了积分图&#xff08;Integral Image&#xff09;的概念。积分图中任意一点 ( x , y ) (x,y) (x,y)的值是从图左上角到该点形成的矩形区域内所有值的和。即&#xff1a; I (…

模板[C++]

目录 1.&#x1f680;泛型编程&#x1f680; 2.&#x1f680;函数模板&#x1f680; 2.1 ✈️函数模板概念✈️ 2.2 ✈️函数模板格式✈️ 2.3✈️函数模板的原理✈️ 2.4 ✈️函数模板的实例化✈️ 2.5 ✈️模板参数的匹配原则✈️ 3.&#x1f680;类模板&#x1f680…

文件中找TopK问题 的详细讲解

一&#xff1a;问题&#xff1a; 从一个包含10000整数的文件中找出最大的前10个数。 二&#xff1a;方法&#xff1a; 1&#xff1a;先直接拿文件的前10个数&#xff0c;建造一个小堆 2&#xff1a;再依次读取文件中&#xff0c;剩下的数&#xff0c;比堆顶大&#xff0c;则…

学习记录第二十九天

信号量————来描述可使用资源的个数 信号量&#xff08;Semaphore&#xff09;是一种用于控制多个进程或线程对共享资源访问的同步机制。在C语言中&#xff0c;通常我们会使用POSIX线程&#xff08;pthread&#xff09;库来实现信号量的操作 信号量有两个主要操作&#xf…

C语言 ——— 位段(位域)

目录 什么是位段 位段的内存分配 什么是位段 位段的声明和结构体是类似的 但有两个不同&#xff1a; 1. 位段的成员必须是整型家族&#xff1a; int&#xff08;整型&#xff09; &#xff0c;unsigend int &#xff08;无符号整型&#xff09;&#xff0c;sigend int&…