百度笔试题(10分钟ak,含代码)
十分钟ak,没啥好说的,反正把我挂了,随便做做。
第一题直接判断一下(n+m)的奇偶性就行,代码暂无。
第二题:直接分a[i] > b[i] 和 a[i] < b[i] 即可然后贪心一下:
#include<bits/stdc++.h>
using namespace std;
int n;
long long a[100005],b[100005];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
long long res1 = 0;
long long res2 = 0;
for(int i=1;i<=n;i++){
if(a[i] > b[i]){
res1 = res1 + a[i] - b[i];
}
else{
res2 = res2 + b[i] - a[i];
}
}
cout<<max(res1,res2)<<endl;
}
第三题:二分+差分即可(线段树也可)
#include "bits/stdc++.h"
using namespace std;
long long sub[100005];
long long a[100005];
int rr[100005],ll[100005];
int n,m;
bool check(int x){
for(int i=1;i<=n;i++){
sub[i] = 0;
}
for(int i=1;i<=x;i++){
sub[ll[i]] += 1;
sub[rr[i] + 1] -= 1;
}
for(int i=1;i<=n;i++){
sub[i] = sub[i - 1] + sub[i];
if(sub[i] > a[i]) return false;
}
return true;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>ll[i]>>rr[i];
}
int l = 1;
int r = m;
int ans = 0;
while (l<=r){
int mid = (l+r) >> 1;
if(check(mid)){
ans = mid;
l = mid + 1;
}
else{
r = mid - 1;
}
}
cout<<ans<<endl;
}
#笔试##笔试题解##百度##题解##我的实习求职记录#
美的集团公司福利 724人发布