百度笔试编程题

第一题 很简单
#include <bits/stdc++.h>
using namespace std;
int main() {
	long long n = 0, ans = 0;
	cin >> n;
	ans = n*(n-1) - 1;
	cout << ans << endl;
	return 0;
} 
第二题 特殊情况比较多,数据其实不强,有这么几种特殊情况,一,0的石头堆超过两个 二,相同石头堆超过三个 三,相同石头堆有两个,且不止一对 四,两个相同的石头堆,数目为n,且有个堆为n-1(这种情况的数据并没有,但应当是要考虑的)
当时改BUG为了防止数字过大把所有int都换成long long了。。
#include <bits/stdc++.h>

using namespace std;

bool duWin(vector<long long> &rn) {
	long long sum = 0, n = rn.size();
	map<long long, long long> mp;
	for(auto &i : rn) {
		sum += i;
		if(mp.find(i) != mp.end())
			++mp[i];
		else
			mp[i] = 1;
	}
	if(!sum)
		return false;
	if(mp[0] >= 2)
        return false;
    int pair = 0;
	for(auto &i : mp) {
		if(i.second >= 3) {
			return false;
		}
		if(i.second == 2 && mp.find(i.first - 1) != mp.end()) {
			return false;
		}
        else if(i.second == 2) {
            ++pair;
        }
	}
    if(pair >= 2)
        return false;
	sum -= n*(n-1)/2;
	if(sum % 2 == 1)
		return true;
	else
		return false;
}

int main() {
	long long t = 0, n = 0;
	vector<vector<long long>> rock;
	cin >> t;
	for(long long i = 0; i < t; ++i) {
		vector<long long> rockNum;
		cin >> n;
		for(long long j = 0; j < n; ++j) {
			long long temp = 0;
			cin >> temp;
			rockNum.emplace_back(temp);
		}
		rock.emplace_back(rockNum);
	}
	for(auto &i : rock) {
		if(duWin(i))
			cout << "man" << endl;
		else
			cout << "woman" << endl;
	}
	return 0;
} 
第三题 求大佬给思路,反正大概知道是要用点点之间的距离,相交圆的半径?随便瞎写了点过了10%,实在来不及了

#百度##笔试题目##C++工程师#
全部评论
https://blog.csdn.net/yhf_naive/article/details/105186348 第三题
1 回复
分享
发布于 2020-03-29 21:24
第三题二分答案
点赞 回复
分享
发布于 2020-03-29 21:11
联想
校招火热招聘中
官网直投
第三题老套路了,二分+并查集可以做,最短路也可以做。
点赞 回复
分享
发布于 2020-03-29 21:41
包包这么厉害的吗
点赞 回复
分享
发布于 2020-03-29 22:02
菜鸡求问:sum -= n*(n-1)/2; 是为什么
点赞 回复
分享
发布于 2020-03-31 00:19

相关推荐

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