9.17百度C++编程题

1.数学题 m*a+n*b>=n*m-k,求a+b最小值,题目说了不等式右边大于零,a和b非负。为了让a+b越小,所以让m,n中的较大值的乘积项越大越好。
#include<bits/stdc++.h>
using namespace std;
int main() {
	long long  n, m,k;
	scanf("%lld %lld %lld", &n, &m, &k);
	long long sum = n*m - k;
	long long res;
	if (m > n) {
		res = sum / m + sum % m;

	}
	else {
		res = sum / n + sum % n;
	}
	printf("%lld", res);
}


2.安排任务,给出各个任务的所需时间和deadline,看是否有任务会超时,模拟一下
#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<int, int> a, pair<int, int>b) {
	if (a.second != b.second)return a.second < b.second;
	return a.first < b.first;
}
int main() {
	int t,n, a, b;
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		vector<pair<int, int>> v;
		for (int i = 0; i < n; i++) {
			scanf("%d%d", &a, &b);
			v.push_back({ a,b });
		}
		sort(v.begin(), v.end(), cmp);
		int cur = 0;
		bool flag = true;
		for (auto it : v) {
			cur += it.first;
			if (cur > it.second) {
				flag = false;
				break;
			}
		}
		printf(flag ? "Yes\n" : "No\n");


	}
	return 0;
}

3.二人博弈。用dfs遍历了两次,找到两人能访问的中间结点,和各自一边的节点。中间结点数为偶数,两人平分;为奇数,牛牛多取一个。牛牛先手,胜利条件是牛牛能取的点要比牛妹多
#include<bits/stdc++.h>
using namespace std;
int t, n, a, b;
vector<int> v[100005];
bool vis1[100005], vis2[100005];
void dfs1(int index) {
	if (index == n)return;
	vis1[index] = true;
	for (int i = 0; i < v[index].size(); i++) {
		if(vis1[v[index][i]]==false)dfs1(v[index][i]);
	}
}
void dfs2(int index) {
	if (index == 1)return;
	vis2[index] = true;
	for (int i = 0; i < v[index].size(); i++) {
		if (vis2[v[index][i]] == false) dfs2(v[index][i]);
	}
}

int main() {
	
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		for (int i = 0; i < 100005; i++) {
			v[i].clear();
		}
		fill(vis1, vis1 + 100005, 0);
		fill(vis2, vis2 + 100005, 0);
		for (int i = 0; i < n-1; i++) {
			scanf("%d%d", &a, &b);
			v[a].push_back(b);
			v[b].push_back(a);
		}
		int res1 = 0, res2 = 0;
		dfs1(1);
		dfs2(n);
		for (int i = 2; i < n; i++) {
			if (vis1[i]) {
				if (vis2[i]) {
					res1++;
					res2++;
				}else {
					res1 += 2;
				}
			}else {
				if (vis1[2]) {
					res2 += 2;
				}
				
			}
		}
		res1 = res1 / 2 + res1 % 2) ;
		res2 = res2 / 2;
		if (res1 > res2)printf("niuniu\n");
		else printf("niumei\n");

	}
	return 0;
}



#笔试题目##百度##C++工程师#
全部评论
大佬大佬 tql
点赞 回复
分享
发布于 2019-09-17 21:05
第二题我也这么写的,可是提示我内存超了?就一个vector呀
点赞 回复
分享
发布于 2019-09-17 21:07
联易融
校招火热招聘中
官网直投
第一题的sum%m换成sum%m/n 可以吗
点赞 回复
分享
发布于 2019-09-18 12:50
楼主内推:【拼多多校园招聘】内推链接:https://careers.pinduoduo.com/campus/grad?t=d6dKdhDUqq,内推码:d6dKdhDUqq。期待你的加入!我们一起,无拼不青春!(通过此链接投递计入内推,内推简历优先筛选~)
点赞 回复
分享
发布于 2021-07-07 16:59

相关推荐

点赞 10 评论
分享
牛客网
牛客企业服务