蚂蚁 - 实习 - 笔试

2025年3月9日 19:00-20:40

选择题45分:

  • 7道基础单选,4道基础不定项,2道 Java 单选,2道 Java 不定项
  • 考点:计算机网络、操作系统、设计模式、数据库、二叉树、Java 内存地址…

编程题55分:

字符串对照实验:

第一行输入一个字符串长度,第二行输入一个字符串,第三行输入一个字符串(仅有大小写字母)。

若第 1 个字符串在第 i 个位置的字符为大写字母,则输出第 2 个字符串在第 i 个位置的字符的大写字母;

若第 1 个字符串在第 i 个位置的字符为小写字母,则输出第 2 个字符串在第 i 个位置的字符的小写字母;

若第 1 个字符串在第 i 个位置的字符为数字,则输出第 2 个字符串在第 i 个位置的字符的ASCII码;

若第 i 个位置的字符为其他字符,则输出 ‘_‘ 。输入:字符串长度,2行字符串输出:按指定规则输出

例如:
输入:10	Aa01$% ^&*	aAAaaaaaaa
输出:Aa9765______

树的哈曼顿距离:

二叉树有一个编号为1的根结点,其坐标为 (0,0),输入两个数字(u,v)表示有一条 u,v 相连的无向边,每一个结点左子结点的编号小于右子结点的编号,若无子结点优先选择左子结点。

若父结点的坐标为(a,b),则左子结点的坐标为(a-1,b-1),右子结点的坐标为(a+1,b-1)。

两个结点的哈曼顿距离定义为 |x1-x2|+|y1-y2|。

问输入 n 个结点后,输入2个结点坐标,求其哈曼顿距离。

小红求和

输入一个一维矩阵,求:

全部评论

相关推荐

头像
03-09 21:01
已编辑
华中科技大学 Java
1,模拟一下就好,别忘了处理换行和回车,代码略。2,bfs一下,找出每个点的坐标,o1输出就可以了。void bfs(int u) {    queue q;    q.push(u);    pos[u] = {0, 0};    mark[u] = 1;    while (q.size() > 0) {        int v = q.front();        q.pop();        int l = - 1, r = -1;        for (auto x : g[v]) {            if (mark[x]) continue;            mark[x] = 1;            q.push(x);            if (l == -1) l = x;            else {                r = x;                if (l > r) swap(l, r);             }        }        if (l != -1) {            pos[l] = pair(pos[v].x - 1, pos[v].y - 1);        }        if (r != -1) {            pos[r] = pair(pos[v].x + 1, pos[v].y - 1);        }    } }3,可以发现,我们要计算的是每个数整除其他数之后的和。其实可以反过来想,我们要计算每个数作为除数,其他数除他之后的和。对于数i来说,[j * i, j * i + i - 1]这个范围内的数除以i等于j,那我们可以枚举每个i和每个j,维护一个前缀和来快速算出[j * i, j * i + i - 1]这个范围内的贡献,贡献数是i的数量 * 范围内数的个数 * j。时间复杂度是n + n/2 + n /3 +... = nlogn代码如下,cnt[i]是数字i的数量,sum[i]是前cnt[i]的前缀和,N是数的最大范围1e5;    for (int i = 1; i < N; i ++) {        if (cnt[i] == 0) continue;        for (int j = 1; j * i < N; j ++) {            res += 1ll * (sum[min(i * j + i - 1, N - 1)] - sum[i * j - 1]) * cnt[i] * j;        }    }#笔试# #蚂蚁# #蚂蚁笔试#
投递蚂蚁集团等公司10个岗位
点赞 评论 收藏
分享
评论
3
6
分享

创作者周榜

更多
牛客网
牛客企业服务