# 小美走公路

在处理环形情况的时候,很多录友容易算懵了,不是多算一个数,就是少算一个数。

这里这样的题目,最好的方式是将 两个环展开,首尾相连,这样我们就可以通过 直线的思维去解题了

两个注意点:

  1. x 可以比 y 大,题目没规定 x 和y 的大小顺序
  2. 累计相加的数可能超过int
#include <iostream>
#include <vector>
using namespace std;
int main () {
    int n;
    cin >> n;
    vector<int> vec(2* n + 1, 0);
    for (int i = 1; i <= n; i++) {
        cin >> vec[i];
        vec[n + i] = vec[i];
    }
    int x, y;
    cin >> x >> y; 
    int xx = min(x ,y); // 注意点1:x 可以比 y 大
    int yy = max(x, y);
    long long a = 0, b = 0;  // 注意点2:相加的数可能超过int 
    for (int i = xx; i < yy; i++) a += vec[i];
    for (int i = yy; i < xx + n; i++ ) b += vec[i]; 
    cout << min(a, b) << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次更新:: 3/4/2025, 5:49:45 PM
@2021-2025 代码随想录 版权所有 粤ICP备19156078号