首页 > 滴滴笔试 21年3月20日
头像
码不停Ti2001
编辑于 2021-04-06 10:14
+ 关注

滴滴笔试 21年3月20日

没想到选择题 一个三分占60分 编程两道才 40分

选择

感觉选择好多不会啊
有java基础
操作系统线程相关
然后有Linux命令选择
别的记不太清了

编程

第一题 A了

把 26个字母 从后往前 第一次出现的顺序 记住
然后 把第一个 不是a 的换成 他前面的字母
反正就是这个意思 一下就过了

#include<iostream>
using namespace std;
int num[300];
int main(){
    string s;
    cin>>s;
    for(int i= s.size()-1;i>=0;i--){
        if(num[s[i]]==0)num[s[i]]=i;
    }
//    for(int i='a';i<='z';i++){
//        cout<<num[i]<<" "<<i<<endl;
//    }
    int flag=0;
    for(int i=0;i<s.size();i++){
        if(flag==1){
            break;
        }
        if(s[i]=='a')continue;
        else{
            for(int j='a';j<s[i];j++){

                if(num[j]>i){
                //cout<<num[j]<<": "<<i<<endl;
                    flag=1;
                    s[num[j]]=s[i];
                    s[i]=j;
                    cout<<s<<endl;
                    return 0;
                }
            }
        }
    }
    cout<<s;
    return 0;
}

第二题 过了63%

我觉得是连通图的题但是我不会
我对并查集有点印象 就用并查集暴力做的
过了百分之27 然后优化了许多 vector 之类的内存和 findfather 调用的次数(因为我忘了并查集是啥了 所以写的 不优雅)
最后显示 超时超限 过了百分之63

我发现全部输出NO 能拿百分之9

#include<iostream>
#include<vector>
#include<set>
using namespace std;
int vv[1005];
int path[100005][2];
int findfa(int a){
    if(a!=vv[a]){
        vv[a]=findfa(vv[a]);
    }return vv[a];
}
int main(){
    int t;
    cin>>t;
    for(int i=0;i<t;i++){
        int n,m;
        cin>>n>>m;
        //vector<vector<int> >node(n,vector<int>(n));
        //vector<vector<int> >path(m,vector<int>(2));
        //set<int>st;
        int flag=1;
        for(int i=0;i<m;i++){
            int a,b;
            cin>>a>>b;
            //node[a-1][b-1]=1;
            //node[b-1][a-1]=1;
            path[i][0]=a-1;
            path[i][1]=b-1;
        }
        for(int i=0;i<m;i++){
            int a,b;
            //vector<int>vv(n,999);
            for(int j=0;j<n;j++){
                vv[j]=j;
            }
            for(int j=0;j<m;j++){
                if(flag==0){
                    break;
                }
                if(j==i){
                    continue;
                }
                a=path[j][0];
                b=path[j][1];
                int fa = findfa(a);
                int fb = findfa(b);
                if(fa<fb){
                    vv[fb]=fa;
                    //findfa(fb,vv);
                }else {
                    vv[fa]=fb;
                    //findfa(fa,vv);
                }
                //cout<<a<<vv[a]<<" "<<b<<vv[b]<<endl; 

            }
            for(int i=0;i<n;i++){
                //cout<<findfa(i,vv)<<"  "<<i<<endl;
                if(findfa(i)!=0){
                    flag=0;
                }
            }
        }
        if(flag==0){
            cout<<"No"<<endl;
        }else{
            cout<<"Yes"<<endl;
        }

    }
    return 0;
}

全部评论

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

推荐话题

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐