9.3 阿里笔试代码
事实证明,一个公司如果有多场笔试,真的是看运气。尤其是题量只有 2 的阿里,从投票结果可以看出,9.3 题目不难。第二题没 AC 有点小遗憾,但是人生总遗憾,倒也无妨,希望自己顺利进面,后续面试加油。第二题笔试写法 O(n^2) 超时,差不多花了有 30min 优化,目标很明确,降一个 n 到 O(nlogn),边界没处理好导致失败告终,结束后找到的 BUG,当前已修改。笔试里,第一题 100%,第二题超时 61.67%。值得一提的是,每次重要笔试面试都会在牛客许愿,也发现好神奇。因为看好多人在问第二题代码,所以贴一下,给有需要的人。若有疑问,欢迎交流
// 第一题
#include <iostream>
#include <string>
using namespace std;
int n, flag, ans;
string str1, str2;
int main() {
cin >> n >> str1 >> str2;
for (int i = 0; i < n; ++i) {
if (str1[i] == str2[i] && flag == 1) {
++ans;
flag = 0;
continue;
}
if (str1[i] != str2[i] && flag == 0) {
flag = 1;
}
}
if (flag == 1) ++ans;
cout << ans << endl;
return 0;
} // 第二题
#include <iostream>
#include <cmath>
using namespace std;
long long a, b, c, ans;
int xMin, xMax, yMin, yMax;
int find_yMin() {
int l = 0, r = 1e9;
while (l != r) {
int mid = ((long long)l + r) >> 1;
if (pow(mid, 3) >= a) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}
int find_yMax() {
int l = 0, r = 1e9;
while (l != r) {
int mid = ((long long)l + r + 1) >> 1;
if (pow(mid, 3) <= b) {
l = mid;
} else {
r = mid - 1;
}
}
return l;
}
int find_left(int i, int yMin, int yMax) {
int l = yMin, r = yMax;
while (l != r) {
int mid = ((long long)l + r) >> 1;
if (pow(i, 2) - pow(mid, 3) >= -c) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}
int find_right(int i, int yMin, int yMax) {
int l = yMin, r = yMax;
while (l != r) {
int mid = ((long long)l + r + 1) >> 1;
if (pow(i, 2) - pow(mid, 3) <= c) {
l = mid;
} else {
r = mid - 1;
}
}
return l;
}
int main() {
cin >> a >> b >> c;
xMin = ceil(sqrt(a));
xMax = floor(sqrt(b));
// cout << xMin << " " << xMax << endl;
yMin = find_yMin();
yMax = find_yMax();
// cout << yMin << " " << yMax << endl;
for (int i = xMin; i <= xMax; ++i) {
if (pow(i, 2) - pow(yMin, 3) < -c) continue;
if (pow(i, 2) - pow(yMax, 3) > c) continue;
int left = find_left(i, yMin, yMax);
int right = find_right(i, yMin, yMax);
if (left == right && abs(pow(i, 2) - pow(left, 3)) > c) continue;
ans += right - left + 1;
// cout << left << " " << right << endl;
}
cout << ans << endl;
return 0;
} #阿里巴巴笔试##秋招##阿里巴巴##笔经##C++工程师#