百度2022年春招机试 4月19日场

这一场是计算机视觉算法的。

评价

总体来讲,编程好答一些。总体来讲,不止编程题的机试都会开发向,建议计算机的理论知识也要备好。

选择题

题目记得不是很清了,包含内容很杂,计算机视觉理论、数据结构、计算机基础、数据库等知识都会考。

感觉有一个智力题目:一段绳子,裁两刀,变成3段,可以拼成一个三角形的概率有多大。(答案是1/4)

系统设计题

不大会。感觉这个题型最难准备,因为会是计算机视觉的一个子方向。不记得是哪个公司,相似题型考的是对视频的目标检测。

编程题

题目1

大意

统计字符串中easy出现次数。必须按照e a s y的顺序来(大小写都是可以的)。必须是完整出现的次数,中间其他字符不会计算在内。

样例

abcdesAssayEaaaassYyy

输出

2

代码

AC

比如样例统计到abcdesAssayEaaaassY就是2次,为了避免出现错误,每次while都加一个判断的bool变量,会显得臃肿,有大佬可以在评论区提供简洁的指导。

#include<iostream>
#include<string>
using namespace std;
int main(){
	string str;
	cin >> str;
	int res = 0, index = 0;
	while(index < str.size()){
		bool flage = false,flaga = false, flags= false, flagy = false;
		while(index < str.size() && str[index] != 'e' && str[index] != 'E' ) index++;
		if(str[index] == 'e'|| str[index] == 'E' ){
			flage = true;
			index++;
		}
		while(index < str.size() && str[index] != 'a' && str[index] != 'A' ) index++;
		if(str[index] == 'a'|| str[index] == 'A' ){
			flaga = true;
			index++;
		}
		while(index < str.size() && str[index] != 's' && str[index] != 'S' ) index++;
		if(str[index] == 's'|| str[index] == 'S' ){
			flags = true;
			index++;
		}
		while(index < str.size() && str[index] != 'y' && str[index] != 'Y' ) index++;
		if(str[index] == 'y'|| str[index] == 'Y' ){
			flagy = true;
			index++;
		}
		if(flage && flaga && flags && flagy)res++;
	//	cout << str.substr(0, index)<<'\n';	
	}
	cout << res;
} 

题目2

大意

小明领导一只队伍,手下n个士兵,第i个士兵攻击为a[i],防守为b[i]。选择士兵,使得攻击力和防守力之和最大,同时要保证攻击力和不小于0,攻击力和不小于0。如果没有符合条件的,就小明上,小明的攻击和防守均是0。输出最后安排的队伍的攻击力与防守力之和。

1 \le n \le 1000,攻击力和防守力都在[-1000,1000]范围内。

样例

5
-5 7
8 -6
6 -3
2 1
0 1

输出

8

代码

通过90%,不知道还有什么点没有注意到。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(vector<int> v1, vector<int> v2){
	if(v1[2] == v2[2]) {
		bool flag1= v1[0] > 0, flag2= v1[1] > 0,flag3= v2[0] > 0, flag4= v2[1] > 0;
		int res1 = flag1 + flag2, res2 = flag3 + 4;
		return res1 >= res2;
	}
	else return v1[2] >= v2[2];
}
int main(){
	int n;
	cin >> n;
	vector<vector<int>> value(n, vector<int>(3));
	for(int i = 0; i < n; i++){
		cin >> value[i][0] >> value[i][1];
		value[i][2] = value[i][0] + value[i][1];
	}

	sort(value.begin(), value.end(),cmp);
	int sum = 0, sum1 = 0, sum2 = 0, ans = 0;
	if(value[0][2] < 0) return 0;
	for(int i = 0; i < n;i++){
		if(value[i][2] < 0 && value[i][1] < 0 && value[i][0] < 0) break;
		sum += value[i][2],sum1 += value[i][0],sum2 += value[i][1];
		if(sum1 >= 0 && sum2 >= 0){
			if(sum > ans) ans = sum;
		}
		
	}
	cout << ans;
	 return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值