百度笔试编程题
第一题 很简单
#百度##笔试题目##C++工程师#
#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%,实在来不及了
