(C++)1046 Shortest Distance
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(C++)1046 Shortest Distance相关的知识,希望对你有一定的参考价值。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int friendDis[100010] = {0};//邻居节点间的距离
int withStDis[100010] = {0};//和第一个结点的距离 --本题的题眼,空间换时间的典例
int main(){
int dis_num,test_num,withst_dis = 0;
scanf("%d",&dis_num);
for(int i=1;i<=dis_num;i++){
scanf("%d",&friendDis[i]);
withst_dis += friendDis[i];
withStDis[i+1] = withst_dis;
}
scanf("%d",&test_num);
int exitA,exitB;
while(test_num--){
scanf("%d %d",&exitA,&exitB);
if(exitA>exitB){//默认出口A的序号小于B
swap(exitA,exitB);
}
//现在要做的事情是把两边的距离都算出来,进行比较
int one_dis = 0,ana_dis = 0;
one_dis = withStDis[exitB] - withStDis[exitA];
ana_dis = withst_dis - one_dis;
printf("%d\\n",one_dis<ana_dis?one_dis:ana_dis);
}
return 0;
}
int withStDis[100010] = {0};//和第一个结点的距离 --本题的题眼,空间换时间的典例
以上是关于(C++)1046 Shortest Distance的主要内容,如果未能解决你的问题,请参考以下文章
PAT——甲级1046S:shortest Distance
pat 1046 Shortest Distance(20 分) (线段树)