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