百度笔试题(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;
}

#笔试##笔试题解##百度##题解##我的实习求职记录#
全部评论
特么的第二题不longlong只能过16,真***
1 回复 分享
发布于 2023-09-12 21:35 北京
大佬,第三题线段树怎么做?qwq我wa了好久.....
点赞 回复 分享
发布于 2023-09-12 21:34 黑龙江
m
点赞 回复 分享
发布于 2023-09-12 22:52 辽宁
同百度笔试,为啥我做的那么难》
点赞 回复 分享
发布于 2023-09-16 09:40 江苏

相关推荐

点赞 评论 收藏
分享
4 7 评论
分享
牛客网
牛客企业服务