百度2021校招C++/PHP研发工程师笔试卷(9月3日)

第一道 暴力
// 暴力
#include <bits/stdc++.h>
using namespace std;

int main() {
	int T, L, n;
	cin >> T;
	while (T--) {
		cin >> L >> n;
		vector<int> left(n);
		vector<int> right(n);
		for (int i = 0; i < n; ++i) {
			cin >> left[i];
			cin >> right[i];
		}
		vector<int> res(L + 1, 0);
		for (int i = 0; i < n; ++i) {
			for (int j = left[i]; j <= right[i]; ++j) {
				++res[j];
			}
		}
		for (int i = 1; i <= L; ++i) {
			cout << res[i] << " ";
		}
		cout << endl;
	}	
}

第二道 双指针
// 双指针
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> PAIR;

bool cmp(const PAIR& p1, const PAIR& p2) {
	return p1.first < p2.first;
}

int main() {
	int T, n, m;
	cin >> T;
	while (T--) {
		cin >> n >> m;
		vector<PAIR> a(n);
		vector<PAIR> b(m);
		int t;
		for (int i = 0; i < n; ++i) {
			cin >> t;
			a[i] = {t, i};
		}
		for (int i = 0; i < m; ++i) {
			cin >> t;
			b[i] = {t, i};
		}
		sort(a.begin(), a.end(), cmp);
		sort(b.begin(), b.end(), cmp);

		vector<int> res(n, -1);
		int i = 0, j = 0;
		while (i < n && j < m) {
			while (j < m && a[i].first > b[j].first)
				++j;
			if (j == m)
				break;
			res[a[i].second] = ++b[j].second;
			++i;
			++j;
		}
		for (int i = 0; i < n; ++i) {
			cout << res[i] << " ";
		}
		cout << endl;
	}	
}

第三道 dfs + 状态保存(可以替换成动态规划)
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;

// n: 台阶总数
// m: 单步跨越最多m级台阶
int n, m;
int dfs(int pre2, int pre1, int r, vector<vector<vector<int>>>& dp) {
	if (r == 0)
		return 1;
	if (r < 0)
		return 0;
	if (dp[pre2][pre1][r] != -1)
		return dp[pre2][pre1][r]; 
	int res = 0;
	for (int i = 1; i <= min(m, r); ++i) {
		if (i != pre1 && i != pre2) {
			res = (res + dfs(pre1, i, r - i, dp)) % mod;
		}
	}
	return dp[pre2][pre1][r] = res;
}

int main() {
	cin >> n >> m;
	vector<vector<vector<int>>> dp(m + 1, vector<vector<int>>(m + 1, vector<int>(n + 1, -1)));
	cout << dfs(0, 0, n, dp) << endl;
    return 0;
}


#百度笔试##笔试题型##百度#
全部评论
第三题写个cout<<2<<endl;还能10%,我佛了
2 回复 分享
发布于 2020-09-03 21:16
大佬
1 回复 分享
发布于 2020-09-03 21:08
大佬
点赞 回复 分享
发布于 2020-09-03 21:06
大佬
点赞 回复 分享
发布于 2020-09-03 21:07
这第三题能过吗,,不超时
点赞 回复 分享
发布于 2020-09-03 21:08
大佬,学习了
点赞 回复 分享
发布于 2020-09-03 21:10
tql
点赞 回复 分享
发布于 2020-09-03 21:11
第二题我感觉和lz写的一模一样,但是我0%
点赞 回复 分享
发布于 2020-09-03 21:12
看不明白😥
点赞 回复 分享
发布于 2020-09-03 21:14
第三题,没想到三维保存状态,暴力的只过了百分之40😞
点赞 回复 分享
发布于 2020-09-03 21:14
这样输出,最后不会多一个空格么?
点赞 回复 分享
发布于 2020-09-03 21:15
第二题用的multimap容器自动排序
点赞 回复 分享
发布于 2020-09-03 21:22
不知道为什么我第二题老是不能通过 #include<cstdio> #include<vector> using std::vector; #include<map> using std::multimap; int main() { int T=1; scanf("%d", &T); for (int t = 0; t != T; ++t) { int n = 3, m = 6; scanf("%d %d", &n, &m); multimap<int, int> a,b; int hope = 0; for (int i = 0; i != n; ++i) { scanf("%d", &hope); a.emplace(hope, i); } int real = 0; for (int i = 0; i != m; ++i) { scanf("%d", &real); b.emplace(real, i); } vector<int>ret(n, -2); for (auto& pr : a) { if (b.empty()) break; int tar = pr.first; auto it = b.upper_bound(tar); if ((--it)->first == pr.first) { ret[pr.second] = it->second; b.erase(it); } else { ++it; if (it == b.cend()) { ret[pr.second] = -2; break; } else { ret[pr.second] = it->second; b.erase(it); } } } for (auto& i : ret) printf("%d ", i + 1); printf("\n"); } return 0; }
点赞 回复 分享
发布于 2020-09-03 21:33
第二题同样的操作,我从尾开始满足起,0%,可惜。
点赞 回复 分享
发布于 2020-09-03 21:33
所以第二题是最后一个数后面还要加一个空格再换行?😰
点赞 回复 分享
发布于 2020-09-03 21:39

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
1 9 评论
分享
牛客网
牛客企业服务