#阿里巴巴笔试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) 回帖