PAT1046. Shortest Distance (20)

http://www.patest.cn/contests/pat-a-practise/1046

 1 #include<cstdio>
 2 
 3 using namespace std;
 4 
 5 #define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
 6 
 7 const int MAXN = 100000 + 10;
 8 
 9 int d[MAXN];
10 int n;
11 
12 void fix_max(int *x, int *y) {
13     if(*x > *y) {
14         int tmp = *x;
15         *x = *y; 
16         *y = tmp;
17     }
18 }
19 
20 int main() {
21     scanf("%d", &n);
22     for(int i = 0; i < n; ++i) {
23         scanf("%d", &d[i]);
24     }
25     for(int i = n; i > 0; --i) d[i] = d[i-1];
26     d[0] = 0;
27     for(int i = 1; i <= n; ++i) d[i] += d[i-1];
28     int m;
29     scanf("%d", &m);
30     for(int i = 0; i < m; ++i) {
31         int x, y;
32         scanf("%d %d", &x, &y);
33         --x, --y;
34         fix_max(&x, &y);
35         int tmp = d[y] - d[x];
36         tmp = MIN(tmp, d[n] - tmp);
37         printf("%d\n", tmp);
38     }
39     return 0;
40 }

 

posted @ 2015-08-03 22:52  ACSeed  Views(210)  Comments(0)    收藏  举报