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

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

Easy 求最大连续bit数

简要题意

给一个整数,求其二进制表示下最长连续 1 的长度。

Solution

反复右移逐位判断即可。

Code

void R()
{
	int n,len=0,ans=0;
	cin>>n;
	while (n)
	{
		if (n&1) len++,ans=max(ans,len);
		else len=0;
		n>>=1;
	}
	cout<<ans;
	return;
}

Medium 小红的排列构造

简要题意

给定 ,构造排列 使得:

时, 不构成排列;

时, 构成排列。

无解则输出

Solution

贪婪地,如果 我们在位置 放置前面未出现的最小的数,否则放第二小的。

当至少有两个数未放置时,一定符合题意。

问题在于如果 一定是一个排列,此时报告无解。

Code

void R()
{
	int n;
	string s;
	cin>>n>>s;
	set<int> st;
	if (s.back()=='0')
	{
		cout<<-1;
		return;
	}
	for (int i=1;i<=n;i++)
		st.insert(i);
	for (char c:s)
	{
		auto it=st.begin();
		if (c=='0') it++;
		cout<<*it<<' ';
		st.erase(it);
	}
	return;
}

Hard [NOIP2001]装箱问题

简要题意

给一个容量为 的背包和 个体积为 的物品,求向包中放入某些物品后,背包剩余空间的最小值。

Solution

很板的背包 dp 。

代表背包已占用 空间的方案数。

考虑放入一个体积为 的物品,有转移:

然后找 数组中最大的有值的位置就好。

其实我们只在意有没有方案,不在意方案数是多少,所以直接取或转移也行。

Code

void R()
{
	int V,n;
	cin>>V>>n;
	vector<int> dp(V+1);
	dp[0]=1;
	for (int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		for (int j=V;j>=x;j--)
			dp[j]|=dp[j-x];
	}
	for (int i=V;i>=0;i--)
		if (dp[i])
		{
			cout<<V-i;
			return;
		}
	return;
}
#牛客春招刷题训练营#
全部评论

相关推荐

好久没来牛客了,今天面试了一个实习生,感觉对方形象乱糟糟的,头发像鸡窝,像刚睡醒就来面试了,第一印象直接大打折扣,感觉我没有受到应有的尊重,再加上对方业务能力也一般,我直接挂掉;大家面试的时候还是好好收拾一下自己吧,争取给面试官留下个好印象,面试这东西还是存在眼缘的
MinJerous:更在乎本质,应该看候选人是否和岗位需要的能力匹配。洗脸/不洗头都无所谓吧,说不定人家刚刚通宵准备,就是为了这场面试呢?你挂掉他核心原因还是他能力不行,而不是形象。就算形象好点,能力不行你敢给过吗,不怕后面+1质疑你
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
求面试求offer啊啊啊啊:要求太多的没必要理
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务