乐鑫科技提前批算法岗笔试

昨晚的题,两道编程第一道是求冰雹猜想收敛次数最大的数,一直以为有规律可找,后来发现其实收敛的很快,暴力求解就完事了。
第二道咋一看以为二叉树,后来发现就是一棵树,本质是求树上两个节点间的距离,所以bfs即可,求亲密距离时边权为1,求辈分距离时边权是父到子为1,子到父为-1。
第二题的AC代码:
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

struct Node
{
	int v, w;
	Node(int vv, int ww): v(vv), w(ww){}
};

int main()
{
	int n, p1, p2;
	cin >> n >> p1 >> p2;
	vector<vector<Node>> graph(n);
	int u, v;
	for (int i = 1; i < n; i++){
		cin >> u >> v;
		graph[u].push_back(Node(v, 1));
		graph[v].push_back(Node(u, -1));
	}
	int qm = 0, bf = 0;
	queue<Node> que;
	que.push(Node(p1, 0));
	vector<int> vis(n+1, 0);
	while (!que.empty()){
		Node now = que.front();
		que.pop();
		if (now.v == p2){
			qm = now.w;
			break;
		}
		if (vis[now.v]) continue;
		vis[now.v] = 1;
		for (int i = 0; i < graph[now.v].size(); i++)
			if (!vis[graph[now.v][i].v])
				que.push(Node(graph[now.v][i].v, now.w+1));
	}
	while (!que.empty()) que.pop();
	vis.assign(n+1, 0);
	que.push(Node(p1, 0));
	while (!que.empty()){
		Node now = que.front();
		que.pop();
		if (now.v == p2){
			bf = now.w;
			break;
		}
		if (vis[now.v]) continue;
		vis[now.v] = 1;
		for (int i = 0; i < graph[now.v].size(); i++)
			if (!vis[graph[now.v][i].v])
				que.push(Node(graph[now.v][i].v, now.w+graph[now.v][i].w));
	}
	cout << qm << " " << bf << endl;
	return 0;
}

/*
15 7 2
0 1
0 2
1 3
1 4
2 5
2 6
3 7
3 8
4 9
4 10
5 11
5 12
6 13
6 14
*/


全部评论
我咋没收到笔试通知呀
点赞 回复 分享
发布于 2020-07-16 01:11

相关推荐

Eeeeevans:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
吴offer选手:我卡在笔试才是最好笑的,甚至没给我发过笔试链接
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客企业服务