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 }

浙公网安备 33010602011771号