2023 小红书笔试题 0723 提前批
笔试时间:2023年7月23日 提前批
第一题
题目:小红的数组构造
小红的数组构造小红希望你构造一个数组满足以下条件:1. 数组共有n个元素,且所有元素两两不相等。2. 所有元素的最大公约数等于k。3. 所有元素之和尽可能小。请你输出数组元素之和的最小值。
输入描述
两个正整数n和k
1≤ n,k ≤ 10^5
输出描述
一个正整数,代表数组元素之和的最小值。
样例输入
示例1:
3 1
示例2:
2 2
样例输出
示例1:
6
示例2:
6
参考题解
C++:
#include <iostream>
int main() {
long long n, k;
std::cin >> n >> k;
std::cout << ((1 + n) * n / 2) * k << std::endl;
return 0;
}
Java:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long k = sc.nextLong();
System.out.println(((1+n)*n / 2 ) * k);
}
}
Python:
n = int(input()) k = int(input()) print(((1 + n) * n // 2) * k)
第二题
题目:精华帖子
小红书的推荐帖子列表为[0,n],其中所有的帖子初始状态为”普通“,现在运营同学把其中的一些帖子区间标记为了”精华“。
输入描述
第一行输入两个正整数n,m,k,代表初始帖子列表长度,精华区间的数量,以及运营同学准备截取的长度。
接下来的m行,每行输入两个正整数li,ri,代表第i个区间。
1 ≤ k ≤ n ≤ 1000000000
1 ≤ m ≤ 100000
0 ≤ li < ri ≤ n
保证任意两个区间是不重叠的。
输出描述
一个正整数,代表最多的精华帖子数量。
样例输入
5 2 3
1 2
3 5
样例输出
2
参考题解
二分+前缀和。
C++:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n, m, k;
std::cin >> n >> m >> k;
std::vector<std::pair<int, int>> itv(m);
for (int i = 0; i < m; i++) {
std::cin >> itv[i].first >> itv[i].second;
}
std::sort(itv.begin(), itv.end());
// 前缀和
std::vector<int> pres(m + 1, 0);
for (int i = 1; i <= m; i++) {
pres[i] = pres[i - 1] + (itv[i - 1].second - itv[i - 1].first);
}
int res = 0;
for (int i = 0; i < m; i++) {
int l = i, r = m;
while (l < r) {
int mid = (l + r) >> 1;
if (itv[mid].second >= itv[i].first + k) {
r = mid;
} else {
l = mid + 1;
}
}
// r是大于等于当前区间起点的最大值
if (r < m && itv[r].first <= itv[i].first + k) {
// 包含在r区间中
res = std::max(res, pres[r + 1] - pres[i] - (itv[r].second - itv[i].first - k));
} else {
res = std::max(res, pres[r] - pres[i]);
}
}
std::cout << res << std::endl;
return 0;
}
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int[][] itv = new int[m][2];
for (int i = 0; i < m; i++) {
itv[i][0] = sc.nextInt();
itv[i][1] = sc.nextInt();
}
Arrays.sort(itv, (a,b)->a[0] - b[0]);
// 前缀和
int[] pres = new int[m+1];
for (int i = 1; i <= m; i++) pres[i] = pres[i-1] + (itv[i-1][1] - itv[i - 1][0]);
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023 秋招笔试题汇总解析 文章被收录于专栏
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

查看17道真题和解析