牛客春招刷题训练营 - 2025.4.21 题解

活动地址:牛客春招刷题训练营 - 编程打卡活动

Easy 小红的合数寻找

简要题意

找区间 内的合数,或报告无解。

Solution

数据范围很小,枚举后暴力判断是否为合数即可。

Code

void R()
{
	auto isp=[&](int x)->bool
	{
		for (int i=2;i<x;i++)
			if (x%i==0)
				return 0;
		return 1;
	};

	int x;
	cin>>x;
	for (int i=x;i<=2*x;i++)
		if (!isp(i))
		{
			cout<<i;
			return;
		}
	cout<<-1;
	return;
}

Medium 走迷宫

简要题意

给一个 的网格图,右部分格子为障碍格,求从 移动到 的最小步数,或报告无解。

Solution

因为每次移动都会产生 的步数,所以从起点跑 BFS 即可。

Code

void R()
{
	constexpr int inf=1e9;
	int n,m,xs,ys,xt,yt;
	queue<pair<int,int>> q;
	cin>>n>>m>>xs>>ys>>xt>>yt;
	xs--,ys--,xt--,yt--;
	vector<string> G(n);
	vector<vector<int>> d(n,vector<int>(m,inf));
	d[xs][ys]=0;
	q.push({xs,ys});
	for (auto &x:G) cin>>x;

	while (!q.empty())
	{
		int xu=q.front().first;
		int yu=q.front().second;
		q.pop();

		auto extend=[&](int xv,int yv)->void
		{
			if (xv<0||yv<0||xv>=n||yv>=m) return;
			if (G[xv][yv]=='*') return;
			if (d[xu][yu]+1>=d[xv][yv]) return;
			d[xv][yv]=d[xu][yu]+1;
			q.push({xv,yv});
		};

		extend(xu-1,yu);
		extend(xu+1,yu);
		extend(xu,yu-1);
		extend(xu,yu+1);
	}

	if (d[xt][yt]==inf) cout<<-1;
	else cout<<d[xt][yt];
	return;
}

Hard 字母收集

简要题意

给定 的字母矩阵,规定字母 l,o,v,e 的权值分别为 ,其余字母权值均为 ,求左上到右下的非降路径的最大权值和。

Solution

表示从 走过一条非降路径到达 的最大权值和,有转移:

即为答案。

Code

void R()
{
	int n,m;
	cin>>n>>m;
	vector<string> G(n);
	vector<vector<int>> dp(n,vector<int>(m));
	for (auto &x:G) cin>>x;

	auto calc=[&](int i,int j)->int
	{
		char c=G[i][j];
		if (c=='l') return 4;
		if (c=='o') return 3;
		if (c=='v') return 2;
		if (c=='e') return 1;
		return 0;
	};

	for (int i=0;i<n;i++)
		for (int j=0;j<m;j++)
		{
			if (i) dp[i][j]=max(dp[i][j],dp[i-1][j]);
			if (j) dp[i][j]=max(dp[i][j],dp[i][j-1]);
			dp[i][j]+=calc(i,j);
		}
	cout<<dp[n-1][m-1];
	return;
}
#牛客春招刷题训练营#
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 17:02
鼠鼠深知pdd的强度很大,但是现在没有大厂offer,只有一些不知名小厂我是拒绝等秋招呢,还是接下?求大家帮忙判断一下!
水中水之下水道的鼠鼠:接了再说,不图转正的话混个实习经历也不错
投递拼多多集团-PDD等公司10个岗位 >
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务