1046 Shortest Distance (20 分)(简单模拟,前缀和)

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805435700199424

注意:1.这是一个环,两点之间的距离有两种,一是顺时针,二是逆时针,求出其中的一个距离,另一个距离用这个圆的总距离减去得到,输出两个距离之间最小的那个

           2.注意区分x,y的大小,有可能下标大的在前面。

           3.用到了前缀和的思想

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <queue>
 5 #include <cstring>
 6 #include <vector>
 7 using namespace std;
 8 const int maxn = 0x3f3f3f3f;
 9 typedef long long ll;
10 int main() {
11     int n,m,a[100005],sum[100005],sum2 = 0;
12     cin >> n;
13     sum[0] = 0;
14     for(int i = 1; i <= n; i++) {
15         cin >> a[i];
16         if(i < n)
17         {
18             if(i == 1) sum[1] = a[1];
19             else sum[i] = sum[i-1] + a[i];
20         }
21         sum2 += a[i];
22     }
23     cin >> m;
24     int x,y,ans1,ans2;
25     while(m--) {
26     cin >> x >> y;
27         if(x < y) {
28             ans1 = sum[y-1] - sum[x-1];
29             ans2 = sum2 - ans1;
30         }
31         else{
32             ans1 = sum[x-1] - sum[y-1];
33             ans2 = sum2 - ans1;
34         }
35         cout << min(ans1,ans2) << endl;
36     }
37     return 0;
38 }

 

posted on 2019-10-26 15:53  一只小毛球  阅读(182)  评论(0编辑  收藏  举报

导航