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 }