首页 > 阿里巴巴4.13笔试
头像
CHDcloud
编辑于 2020-04-13 20:43
+ 关注

阿里巴巴4.13笔试

#阿里巴巴笔试2020#菜哭了哦,第一道10%,第二道没时间了。

第一道题:蚂蚁森林n个小动物,1~n,小动物编号越小能力越强,现在筛选国王,每个小动物都会崇拜别的小动物或者自己,但只会崇拜比自己能力强的小动物。
问每个人最多可以获得多少票。
第一行输入n,第二行输入n个数值,数值为0代表只崇拜自己,数值为x即崇拜x.现在要投票,每个小动物可能会投给自己,也可能跟自己崇拜的人投相同的票,这里有点语义小坑,不细看会想错。
那么其实就是动态规划

#include <bits/stdc++.h>

using namespace std;
int main(){
    int n;
    while(cin >> n){
        if(n <= 1){
            cout << n << endl;
            return 0;
        }
        vector<int> num(n+1);
        vector<int> ans(n+1,0);
        for(int i = 1;i <= n;i++)//记录每个人崇拜的对象
            cin >> num[i];
        ans[n] = 1;//只有他可能投给自己,则最多为1
        ans[num[n]]++;//他崇拜的人获票+1
        for(int i = n-1;i >= 1;i--){//从后往前动态规划思想
            if(num[i] != 0){
                ans[num[i]] += ans[i]; //所有崇拜i的小伙伴都可能投给i所崇拜的人
            }
            ans[i]++;//投给自己,前面的人不会投给后面的,所以这就是最终值
            cout << ans[i] << endl;
        }
    }
    return 0;
}
大佬可以帮我看看有没有问题。

第二道题

n个城市n个人,每个城市一个人,选择一个城市x,所有人去那聚会,聚合结束所有人返回各自城市。
有m条单向路径,保证每个人可以到达城市x,一个人所消耗时间为往返距离和,且每个人都会选择最短路径,问最长的距离是多少。
第一行 输入 n,m,l 对应城市、路径、聚会城市
接下来m行,x,y,z从城市x到城市y的距离为z
输出
输出最长距离

现在想想挺简单的,就是图的遍历,找每个人最小距离然后比较,奈何一个小时还是很紧张,老是纠结第一题哪里出问题了,最后发现题没审清。
还是熟练度不够,秋招再战!
所以奉劝读题读三遍

全部评论

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

相关热帖

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

近期精华帖

热门推荐