阿里开发4.2笔试
第一题:
十分钟ac
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main() {
int t;
cin >> t;
while (t-- > 0){
int n;
cin >> n;
vector<int> data;
unordered_map<int, bool> find;
while (n-- > 0){
int tmp;
cin >> tmp;
data.push_back(tmp);
//find[tmp] = true;
}
int ans = 0;
sort(data.begin(), data.end());
for (int i = data.size() - 1; i >= 0; --i) {
int tmp = data[i];
if (find.count(tmp + 1) != 1){
find[tmp + 1] = true;
find.erase(tmp);
}else{
find[tmp] = true;
}
}
cout << find.size() << endl;
}
} 第二题:
十分钟用递归写完,结果递归层数超出,又改成栈去做,又超出内存限制,怼了50分钟没怼过去,考完把舍友当小黄鸭讲题目发现一个判断条件粗心写错了,心态炸裂,这里放出正确的:
#include <iostream>
using namespace std;
double cal(int a, int b);
int main() {
int t;
cin >> t;
while (t-- > 0){
int origin;
cin >> origin;
cout << cal(origin, origin) << endl;
}
}
double cal(int a, int b){
if (a > 0 && b <= 0){
return 0;
}else if (a <= 0 && b <= 0){
return 0.5;
}else if (a <= 0 && b > 0){
return 1;
}else{
return 0.25 * cal(a - 100, b) + 0.25 * cal(a - 75, b - 25) + 0.25 * cal(a - 50, b - 50) + 0.25 * cal(a - 25, b - 75);
}
} 