头条第三题 12% 什么鬼,感觉思路没问题
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define mod 1000000007ll
#define LL long long
int max_x[200000], min_x[200000], max_y[200000], min_y[200000];
int bin_max(int *a, int n, int va) {
int ans = 0;
int l = 0, r = n;
while (l <= r) {
int mid = (l + r) / 2;
if (a[mid] < va) {
ans = mid;
l = mid +1;
} else {
r = mid - 1;
}
}
return ans;
}
int bin_min(int *a, int n, int va) {
int ans = 0;
int l = 0, r = n;
while (l <= r) {
int mid = (l + r) / 2;
if (a[mid] > va) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
int main() {
int tmp_x = 0, tmp_y = 0;
string s;
cin >> s;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'u') {
tmp_x -= 1;
} else if (s[i] == 'd') {
tmp_x += 1;
} else if (s[i] == 'l') {
tmp_y -= 1;
} else {
tmp_y += 1;
}
max_x[i + 1] = max(max_x[i], tmp_x);
min_x[i + 1] = min(min_x[i], tmp_x);
max_y[i + 1] = max(max_y[i], tmp_y);
min_y[i + 1] = min(min_y[i], tmp_y);
}
int m;
cin >> m;
for (int i = 0; i < m; i++) {
int w, h, x, y;
cin >> w >> h >> x >> y;
int tmp1 = bin_min(min_x, s.size(), -1 * x);
int tmp2 = bin_min(min_y, s.size(), -1 * y);
int tmp3 = bin_max(max_x, s.size(), w - x + 1);
int tmp4 = bin_max(max_y, s.size(), h - y + 1);
int ans = min(tmp1, min(tmp2, min(tmp3, tmp4))) + 1;
cout << min(ans, (int)s.size()) << endl;
}
return 0;
}
/*
uuurrdddddl
3
5 6 3 3
5 6 4 2
6 6 4 2
*/
阿里云工作强度 721人发布
