首页 > 美团8月13日笔试(C++)
头像
lollipopSnow
发布于 08-13 18:15
+ 关注

美团8月13日笔试(C++)

AK了,但是答案可能不是最优,如果有更好的答案欢迎讨论

第一题

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main(){
    int n,t;
    cin>>n>>t;
    vector<int>vec(n);
    for(int i=0;i<n;++i){
        cin>>vec[i];
    }
    sort(vec.begin(),vec.end());
    int res = 0;
    int cur = t;
    for(int i=0;i<n;++i){
        if(vec[i]<cur){
            ++res;
        }
        else{
            cur+=t;
        }
    }
    cout<<res<<endl;
    return 0;
}

第二题

#include<iostream>
#include<vector>

using namespace std;

int main(){
    int n,m,k;
    cin>>n>>m>>k;
    vector<vector<bool>>grid(n,vector<bool>(m,0));
    string s;
    cin>>s;
    int clean = 1;
    int x = 0, y=0;
    grid[0][0]=true;
    int i=0;
    for(;i<k;++i){
        switch (s[i])
        {
        case 'W':
            --x;
            break;
        case 'A':
            --y;
            break;
        case 'S':
            ++x;
            break;
        case 'D':
            ++y;
            break;
        default:
            break;
        }
        if(!grid[x][y]){
            ++clean;
            grid[x][y]=true;
        }
        if(clean==m*n){
            break;
        }
    }
    if(i==k){
        cout<<"No"<<endl;
        cout<<m*n-clean;
    }
    else{
        cout<<"Yes"<<endl;
        cout<<i+1<<endl;
    }
    return 0;
}

第三题

#include<iostream>
#include<vector>

using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int>vec(n);
    for(int i=0;i<n;++i){
        cin>>vec[i];
    }
    vector<int>result(n,-1);
    int cur = 0;
    for(int i=0;i<n;++i){
        int num=0;
        while(true){
            if(result[cur]==-1&&num==2){
                break;
            }
            if(result[cur]==-1){
                ++num;
            }
            cur = (cur+1)%n;
        }
        result[cur]=vec[i];
    }
    for(int i:result){
        cout<<i<<" ";
    }
    cout<<endl;
    return 0;
}

第四题

#include<iostream>
#include<vector>
#include<unordered_map>

using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int>vec(n);
    unordered_map<int,int>mp;
    for(int i=0;i<n;++i){
        cin>>vec[i];
    }
    long long res=0;
    for(int j=0;j<n;++j){
        for(int k=j+1;k<n;++k){
            int t = 3*vec[j]-vec[k];
            if(mp.count(t)){
                res+=mp[t];
            }
        }
        ++mp[vec[j]];
    }
    cout<<res<<endl;
    return 0;
}

第五题

#include<iostream>
#include<vector>

using namespace std;

vector<int>vec;
int n;
int res;

void dfs(int node,int cur){
    int left = node*2;
    int right = node*2+1;
    cur+=vec[node];
    if(left>n){
        res = max(res,cur);
    }
    if(left<=n)
        dfs(left,cur);
    if(right<=n)
        dfs(right,cur);
}

int main(){
    cin>>n;
    vec.resize(n+1);
    for(int i=1;i<=n;++i){
        cin>>vec[i];
    }
    res = 0;
    dfs(1,0);
    cout<<res<<endl;
    return 0;
}

全部评论

(10) 回帖
加载中...
话题 回帖

近期精华帖

热门推荐