A1046
n个节点围成一个环,每个节点之间的距离已知。输入n并给出n个节点的距离,输入m组节点编号(两个),求这两个节点编号间的最短距离。
1 建立dis[]数组,记录V1点到每一个点的顺时针距离,sum计算环的总距离。
2 输入m组节点编号,如果左边的值大于右边的值,则使用swap()函数将其交换。
3 计算temp=dis[right-1]-dis[left-1],比较temp和sum-temp,输出最小的即为最短距离。
注1:swap()函数即将两个变量交换:swap(a,b);
注2:#include<algorithm>:包含swao()和min()两个函数的函数库,当要使用这两个函数的时候需要写在开头。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int MAXN=100005; 5 int dis[MAXN]; 6 int main(){ 7 int sum=0,tem,query,n,left, right; 8 scanf("%d",&n); 9 for(int i=1;i<=n;i++){ 10 scanf("%d",&tem); 11 sum+=tem; 12 dis[i]=sum; 13 } 14 scanf("%d",&query); 15 for(int i=0;i<query;i++){ 16 scanf("%d%d",&left,&right); 17 if(left>right) swap(left,right);//交换left和right 18 int temp=dis[right-1]-dis[left-1]; 19 printf("%d\n", min(temp,sum-temp)); 20 } 21 22 return 0; 23 }
------------恢复内容结束------------