03路灯照明问题
二级标题
二级标题
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
int main() {
int n;
cin >> n;
vector<int> rad(n);
for (int i = 0; i < n; i++) {
cin >> rad[i];
}
int right = (rad.size() - 1) * 100;
vector<vector<int>> spans(n, vector<int>(2));
for (int i = 0; i < rad.size(); i++) {
spans[i][0] = max(0, i * 100 - rad[i]);
spans[i][1] = min(right, i * 100 + rad[i]);
}
sort(spans.begin(), spans.end(), [](vector<int> &a, vector<int>b) {
return a[0] < b[0];
});
int tol = 0;
int preStart = spans[0][0];
int preEnd = spans[0][1];
for (int i = 1; i < spans.size(); i++) {
int curStart = spans[i][0];
int curEnd = spans[i][1];
if (curStart <= preEnd) {
preEnd = max(preEnd, curEnd);
} else {
tol += curStart - preEnd;
preStart = curStart;
preEnd = curEnd;
}
}
cout << tol << endl;
return 0;
}