首页 > 其他 > 详细

A1046

时间:2019-12-20 16:42:30      阅读:176      评论:0      收藏:0      [点我收藏+]

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 } 

 

------------恢复内容结束------------

A1046

原文:https://www.cnblogs.com/Lynn-2019/p/12073223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!