微众银行笔试 微众银行软件算法笔试
订阅专栏,方便查阅,时刻更新各厂软件算法笔试https://blog.nowcoder.net/zhuanlan/0oDWVm
1、区间计数
题目描述:
给出两个长度均为n的数组A={a1,a2,...,an},B={b1,b2,...,bn}。你需要求出其有多少个区间[L,R]满足数组A中下标在[L,R]中的元素之和在[La,Ra]之中,且数组B中下标在[L,R]中的元素之和在[Lb,Rb]中。
输入描述
第一行有一个正整数N(1≤N≤100000),代表两个数组的长度。
第二行有N个非负整数,范围在0到1000000000之间,代表数组中的元素。
第三行有N个非负整数,范围在0到1000000000之间,代表数组中的元素。
第四行有4个整数La,Ra,Lb,Rb,范围在0到1018之间,代表题目描述中的参数。
输出描述
输出一个整数,代表所求的答案。
样例输入
4
1 4 2 3
2 4 1 1
3 7 4 6
样例输出
3
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
using namespace std;
int bcs1(const vector<int>& nums, int l, int r, int target) {
while (l < r) {
int mid = (l + r) / 2;
if (nums[mid] >= target) {
r = mid;
} else {
l = mid + 1;
}
}
return r;
}
int bcs2(const vector<int>& nums, int l, int r, int target) {
while (l < r) {
int mid = (l + r + 1) / 2;
if (nums[mid] <= target) {
l = mid;
} else {
r = mid - 1;
}
}
return r;
}
int main() {
int N;
cin >> N;
vector<int> A(N), B(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
for (int i = 0; i < N; ++i) {
cin >> B[i];
}
int La, Ra, Lb, Rb;
cin >> La >> Ra >> Lb >> Rb;
vector<int> preA(N + 1), preB(N + 1);
for (int i = 1; i <= N; ++i) {
preA[i] = preA[i - 1] + A[i - 1];
preB[i] = preB[i - 1] + B[i - 1];
}
int cnt = 0;
for (int i = 0; i <= N; ++i) {
int l = 0, r = i;
int l1 = bcs1(preA, l, r, preA[i] - Ra);
int r1 = bcs2(preA, l, r, preA[i] - La);
int l2 = bcs1(preB, l, r, preB[i] - Rb);
int r2 = bcs2(preB, l, r, preB[i] - Lb);
int l3 = max(l1, l2);
int r3 = min(r1, r2);
if (La <= preA[i] - preA[l3] && preA[i] - preA[l3] <= Ra &&
La <= preA[i] - preA[r3] && preA[i] - preA[r3] <= Ra &&
Lb <= preB[i] - preB[l3] && preB[i] - preB[l3] <= Rb &&
Lb <= preB[i] - preB[r3] && preB[i] - preB[r3] <= Rb) {
cnt += r3 - l3 + 1;
}
}
cout << cnt << endl;
return 0;
}
2、吞吞大作战
题目描述:
吞吞大作战是球球大作战的x.0版本,此时球球并不能通过击败其他球球壮大自己,而是获得得分,每一个球球都有一个能量值a_i,能量大的球球可以击败能量小的球球,当一个球球被击败后,击败者可以获得b_i得分。但是为了和谐,每个球球最多只能击败m个其他球球,然后就会强制进入结算环节。数据保证不会有两个球球具有相同的能量值。 请问每个球球最终最多得分多少。
输入描述
输入第一行包含
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。
