[PAT]1046 Shortest Distance (20 分)-存储

1046.png

分析

一开始拿到这道题就准备使用暴力法去解题,后来发现超时了一个点,发现每次遍历都会重复计算,所以可以定义一个数组,0点到n点的距离存储下来,求n到m点(n<m)的距离是用dis[m]-dis[n]即可!

AC代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    int dis[100010];
    int sum=0;
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        sum+=x;
        dis[i]=sum;
    }
    int m;cin>>m;
    for(int i=0;i<m;i++){
        int a,b;
        cin>>a>>b;
        if(a>b){
            int temp=a;a=b;b=temp;
        }
        int x1=dis[b-1]-dis[a-1];
        if(x1<sum-x1){
            cout<<x1<<endl;
        }else{
            cout<<sum-x1<<endl;
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容