【PAT-A】1046. Shortest Distance 寫題記錄
阿新 • • 發佈:2018-12-20
思路:
輸入時計算dis與sum,dis[i]表示 Vi到V1的距離,此時會有dis[N+1]出現,不去理他,1到N的距離不被儲存,但無所謂,因為sum-dis[N]即是。計算a、b距離時,dis[a]-dis[b]即可。
注意不能記錄各相鄰點的距離,來相加臨時算a、b的距離,會超時。
#include <cstdio> int main(){ int n,m; scanf("%d",&n); int G[n+1], sum=0, dis[n+1]={0}; for (int i=1;i<=n;i++){ scanf("%d",&G[i]); sum+=G[i]; dis[i+1] = sum; } scanf("%d",&m); int answer[m] = {0}; for (int i=0;i<m;i++){ int a, b; scanf("%d%d",&a,&b); if (a>b){ int t=a; a=b; b=t; } answer[i] =dis[b]-dis[a]; if (answer[i]>sum-answer[i]){ answer[i] = sum-answer[i]; } } for (int i=0; i<m; i++){ printf("%d\n",answer[i]); } return 0; }