美团第二次笔试,记录

第一题,栈模拟

void first(){
    int t;
    cin>>t;

    while(t>0){
        int n;
        cin>>n;
        vector<int> nums(n);
        vector<int> target(n);
        
        for(int i=0;i<n;i++){
            cin>>nums[i];
        }
        stack<int> sta;

        sta.push(nums[0]);

        for(int i=0;i<n;i++){
            cin>>target[i];
        }
        int temp=1;
        for(int i=0;i<n;i++){
            if(sta.empty()&&temp<n){
                sta.push(nums[temp++]);
            }
            while(target[i]!=sta.top() && temp<n){
                sta.push(nums[temp++]);
            }

            if(temp==n && sta.top()!=target[i]){
                cout<<"No"<<endl;
                break;
            }
            else{
                sta.pop();
            }
        }
        if(sta.empty()){
            cout<<"Yes"<<endl;
        }
        t--;
    }
}

第二题 简单dp;

void second(){
    int n;
    cin>>n;
    vector<int> nums(n);
    for(int i=0;i<n;i++){
        cin>>nums[i];
    }
    vector<int> dp(n,0);
    if(n==1){ cout<<nums[0]<<endl;return;}
    if(n==2){ cout<<max(nums[0],nums[1])<<endl;return;}
    if(n==3){ cout<<max(nums[0],max(nums[1],nums[2]))<<endl;return;}
    
    dp[0]=nums[0];
    dp[1]=max(nums[1],dp[0]);
    dp[2]=max(dp[1],nums[2]);

    for(int i=3;i<n;i++){
        dp[i]=max(dp[i-3]+nums[i],dp[i-1]);
    }
    cout<<dp[n-1]<<endl;
}


第三题

前面直接写,82%,加上前缀和,没变化,加上二分查找,才过,二分查找很重要

void third(){

    int n,m;
    cin>>n>>m;
    vector<int> nums(n);
    for(int i=0;i<n;i++){
        cin>>nums[i];
    }
    vector<long> bags(m);
    for(int i=0;i<m;i++){
        cin>>bags[i];
    }

    //sort(nums.begin(),nums.end());

    vector<long> prefix(n);
    prefix[0]=nums[0]*nums[0];
    for(int i=1;i<n;i++){
        prefix[i]=prefix[i-1]+nums[i]*nums[i];
    }
    int flag=0;
    for(int i=0;i<m;i++){
        long bag=bags[i];
        int left =0,right=n-1;
        bool ttt=false;
        while(left<right){
            int mid = left+(right-left)/2;
            if(prefix[mid]==bag){
                flag=mid;
                ttt=true;
                break;
            }
            else if(prefix[mid]>bag){
                right=mid-1;
            }
            else{
                left=mid+1;
            }
        }
        if(!ttt){
            if(bag>=prefix[left]){
                flag=left;
            }
            else if(bag>=prefix[right]){
                flag=right;
            }
            else{
                flag=right-1;
            }
        }
        
        cout<<flag+1;
        if(i<m-1){
            cout<<" ";
        }
    }

}

第四题

用map模拟

void four(){
    string str;
    cin>>str;
    int n;
    cin>>n;
    vector<string> query(n);
    for(int i=0;i<n;i++){
        cin>>query[i];
    }

    string temp="";
    string key="";
    unordered_map<string,string> map;
    int len = str.size();
    for(int i=0;i<len;i++){
        if(str[i]=='='){
            key=temp;
            temp="";
        }
        else if(str[i]==';'){
            map[key]=temp;
            temp="";
        }
        else{
            temp+=str[i];
        }
    }
    for(int i=0;i<n;i++){
        if(map.find(query[i])==map.end()){
            cout<<"EMPTY"<<endl;
        }
        else{
            cout<<map[query[i]]<<endl;
        }
    }
}

第五题 压轴的动态规划,又有破坏次数,还要买和不买

void fifth(){
    int n,k;
    cin>>n>>k;
    vector<int> nums(n);
    for(int i=0;i<n;i++){
        cin>>nums[i];
    }
    
    vector<vector<vector<int>>> dp(n,vector<vector<int>>(k+1,vector<int>(2,0)));
    dp[0][0][1]=nums[0];

    for(int i=1;i<n;i++){
        dp[i][0][0]=max(dp[i-1][0][0],dp[i-1][0][1]);
        dp[i][0][1]=dp[i-1][0][0]+nums[i];
        for(int j=1;j<=k;j++){
            dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]);
            dp[i][j][1]=max(dp[i-1][j-1][1],dp[i-1][j][0])+nums[i];
        }
    }

    cout<<max(dp[n-1][k][0],dp[n-1][k][1])<<endl;

}

#笔试复盘#
全部评论
3.18要寄了😭😭😭
点赞
送花
回复
分享
发布于 2023-03-25 21:26 湖南
什么岗啊
点赞
送花
回复
分享
发布于 2023-03-25 21:30 北京
秋招专场
校招火热招聘中
官网直投
有大佬知道报名第二次笔试会覆盖第一次笔试的成绩吗
点赞
送花
回复
分享
发布于 2023-03-25 21:34 上海
为什么第二题不要dpi-2呀
点赞
送花
回复
分享
发布于 2023-03-25 21:53 湖南
请问巧克力那题样例是有序的吗
点赞
送花
回复
分享
发布于 2023-03-25 22:07 江苏

相关推荐

2 12 评论
分享
牛客网
牛客企业服务