• 2021.3.7阿里研发笔试第一场


    有一点比较纳闷的是,这个岗我没投,可能后来被其他部门捞起来了,我记得之前投的岗简历都没过。而且发来的邮件是c++/java,但是笔试界面的标题就是研发工程师JAVA。纳闷

    昨天晚上7-8点,一个小时的笔试,两道编程题,开手机监控屏幕监控和摄像头,环境调试也就一分钟左右就ok。

    阿里的笔试是测试样例只是用来测试,基本上后台数据是没有测试样例的,所以不会写的话也没法通过输入直接输出去混得分点。

    第一道编程题

    (没写出来)

    题目:给一个 (n) ,表示一个 (n*3) 的矩形,现在手里有若干张为1、2、3的牌,现在我们需要往每个方格里去放牌,放牌的要求是:当前位置的牌要和它上下左右不一样。问有多少种不同的方法数(方法数对 (10^9+7) 取余)。

    思路:DFS尝试失败,暴力尝试失败

    第二道编程题

    (过了20%的数据)

    题目:给出 (n)(s)(t),分别表示有 (n) 条地铁线,起点,终点。
    接下去 (n*2) 行,一行先给出一个 (k) ,下面一行给出这条地铁线上的 (k) 个站点。
    如果两条线中有相同的站点,说明可以进行转车。
    问:从 (s)(t) 最少要转几次地铁。

    思路1:vector直接写失败,并查集尝试失败。直接写了特殊样例的判断过了20%的数据(不存在 (s)(t)(s)(t) 在一条线上)

    思路2:后来找了大佬问一下,正确解法应该是:可以把同一条地铁线上的所有站点之间距离设为0,其他站点之间设为1,最后转化图,然后 (s)(t) 直接转换成最短路就行了。有道理。

    我的代码:(过了20%的数据)

    #include<iostream>
    #include<string.h>
    #include<vector>
    using namespace std;
    #define inf 0x3f3f3f3f
    typedef long long ll;
    
    const int N=1e5+10;
    int n,s,t;
    
    int main()
    {
        bool flag1=0,flag2=0,flag=0;
        scanf("%d %d %d",&n,&s,&t);
        for(int i=0;i<n;i++)
        {
            int k;
            scanf("%d",&k);
            int xx=0,yy=0;
            int x,y;
            cin>>x;
            for(int j=2;j<=k;j++)
            {
                cin>>y;
                if(y==s) flag1=1,xx++;
                if(y==t) flag2=1,yy++;
            }
            if(xx==1&&yy==1) flag=1;
        }
        if(!flag1&&!flag2)
            printf("-1
    ");
        else if(flag)
            printf("0
    ");
        return 0;
    }
    
  • 相关阅读:
    数据库事务的四大特性以及事务的隔离级别
    informer使用示例
    Linux内存、Swap、Cache、Buffer详细解析
    浏览器访问百度的整个过程
    安装zookeeper
    配置java环境
    promethues开发
    go mod常用操作说明
    redis使用基础
    channel的声明和使用
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14493596.html
Copyright © 2020-2023  润新知