int solve(vector<int> &path, int ctb2){
int l = 0, r = 0;
int distL = 0, distR = diameter, distM = 0;
int result = 2147483647;
while(r<(int)path.size()-1){ // 注意这里
distM += path[r];
distR -= path[r];
++r;
while(distM > s){
distM -= path[l];
distL += path[l];
++l;
}
result = min(result, max(distL, distR));
}
result = max(result, ctb2);
return result;
}
int solve(vector<int> &path, int ctb2){
int l = 0, r = 0;
int distL = 0, distR = diameter, distM = 0;
int result = 2147483647;
while(r<(int)path.size()){ // 注意这里
distM += path[r];
distR -= path[r];
++r;
while(distM > s){
distM -= path[l];
distL += path[l];
++l;
}
result = min(result, max(distL, distR));
}
result = max(result, ctb2);
return result;
}
当时写的时候从 r 自增后合法的角度写了r<(int)path.size()-1,但实际上 r 自增后在后续循环节根本没有用上,只要当前的 r 合法即可,后来下载了 #13 的数据本地验证才查出来。