题目:

样例:

这道题我最开始写的代码在更正过一些小问题后如下:

#include<stdio.h>
int main(){int n,m;int b,e;int d[2][10000]={0};int min[10000];scanf("%d",&n);int a[100000];for(int i=1;i<=n;i++){scanf("%d",&a[i]);}scanf("%d",&m);for(int i=0;i<m;i++){int t;scanf("%d%d",&b,&e);if(b>e){t=e;e=b;b=t;}int l=b;while(l<e)d[0][i]+=a[l++];//这里不可以直接b++因为会把b的值改了影响到后面   int j=1;int r=e;    while(j<b)d[1][i]+=a[j++];while(r<=n)d[1][i]+=a[r++];           if(d[0][i]<d[1][i])min[i]=d[0][i];elsemin[i]=d[1][i];//printf("%d  %d\n",d[0][i],d[1][i]);//这里把d到e和e到b的距离都输出来发现d[1][i]永远是30printf("%d\n",min[i]);}return 0;
}

如果只追求一个运行的答案的话,上面这样完全没有问题,但如果在答案正确的同时还满足运行时限的要求,就要从时间复杂度这个角度来理解一下,如下是我的御用大佬给出的解释:

所以很明显,我最初的代码时间复杂度过高。那要如何改进呢,我新学习到了两个词语:前缀与差分,对于多层循环的问题我们可以通过技巧来减少循环:

详细可以参考:(3条消息) 前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)_林深不见鹿 的博客-CSDN博客_前缀和和差分

于是改进后的代码如下:

#include<stdio.h>
int main(){int n,m;scanf("%d",&n);int d[100000];int b[10000],e[10000];int sum=0;for(int i=1;i<=n;i++){scanf("%d",&d[i]);sum+=d[i];}int dis[100000];for(int i=2;i<=n;i++)dis[i]=dis[i-1]+d[i-1];//这个式子可以省去一个循环嗷 scanf("%d",&m);for(int i=0;i<m;i++){scanf("%d%d",&b[i],&e[i]);int t;if(b[i]>e[i]){t=e[i];e[i]=b[i];b[i]=t;}int dis0=dis[e[i]]-dis[b[i]];if(dis0<(sum-dis0))printf("%d\n",dis0);elseprintf("%d\n",sum-dis0);}return 0;
} 

(3.1E)Shortest Distance (20)相关推荐

  1. 【测试点2超时问题】1046 Shortest Distance (20 分)_21行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 The task is really simple: given N exits on a highway which forms ...

  2. 【PAT甲级 环最短距离】1046 Shortest Distance (20 分) Java、C++

    题目 这题是给你一个环,让你计算两点之间最短距离. 环的任意两点就两条路,只要算出环长和任意一条路的大小,另一条就出来了 时间复杂度O(N) 提前计算前缀长度和即可 题解 C++ 全部测试点通过 #i ...

  3. 1046 Shortest Distance (20 分)【难度: 简单 / 知识点: 前缀和 / 破环成链】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805435700199424 对于环这种情况,开两倍的数组即可. #inc ...

  4. 1046 Shortest Distance (20分)测试点分析

    这个题目首先在读题的时候我就感受到了效率问题,第一提供的点的个数非常多,10^5数据量,其次又提供了 10的4次方的查询,如果不是线性复杂度,肯定有后面的测试点要超时. 题目思想很巧妙,我趴在床上分析 ...

  5. LeetCode 613. Shortest Distance in a Line --SQL

    LeetCode 613. Shortest Distance in a Line --SQL LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专栏里,大部 ...

  6. Leetcode PHP题解--D49 821. Shortest Distance to a Character

    D49 821. Shortest Distance to a Character 题目链接 821. Shortest Distance to a Character 题目分析 给定一个字符串s和一 ...

  7. Shortest Distance from All Buildings

    Shortest Distance from All Buildings 题目链接:https://leetcode.com/problems... 这道题要求最短的距离,一般这种要求可以到的地方的距 ...

  8. PAT甲级1046 Shortest Distance:[C++题解]前缀和

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 用前缀和快速求出一段的和.注意求两段,取最小值. ac代码 #include<bits/stdc++.h> using ...

  9. 【Leetcode_easy】821. Shortest Distance to a Character

    problem 821. Shortest Distance to a Character 参考 1. Leetcode_easy_821. Shortest Distance to a Charac ...

最新文章

  1. 无线传感器网络协议与体系结构 思维导图 (book) Protocols and Architectures for Wireless Sensor Networks, Holger Karl
  2. Jenkins使用遇到的问题总结
  3. 《啊哈!算法》笔记_Day02
  4. vim 改变当前工作路径和创建文件夹
  5. 【机器学习基础】数学推导+纯Python实现机器学习算法19:PCA降维
  6. 完全复制 mysql,MySQL完全复制表结构
  7. 程序开发天团必备单品,稳定输出还加持千元商务礼限时送!
  8. 走近华为“天才少年”钟钊:入职两年两度突破业界学界极限
  9. Get AD Object and disable move delete AD account script 查询删除AD账户计算机
  10. 百度云盘免下载百度云盘全速下载方法
  11. 解决Windows上编译PHP7.1拓展的错误
  12. 迭代器模式C++实现
  13. [CEOI2008]order
  14. 谁会成为中国互联网下一代英雄
  15. JAVA菜鸟的第一天
  16. e.target的用法
  17. NEON码农指导 Chapter 4 : NEON Intrinsics
  18. usercity 小程序_微信小程序API 用户信息 wx.getUserInfo(OBJECT)
  19. 如何通过QA质量管理提高软件质量?
  20. Oracle PL/SQL 源代码加密实战

热门文章

  1. windows连接蓝牙失败
  2. Android 手机设置 Charles 代理,pem 证书安装不上?
  3. vue使用vue-video-player播放视频及遇到的问题
  4. r计算百分位数_R中产生的分位数和百分位数之间的差异
  5. 车载PHY的唤醒与睡眠的正确姿势
  6. 友价源码怎么样主动提交链接给百度?
  7. dble配置mysql主从同步
  8. YOLO9000, Better, Faster, Stronger论文翻译——中英文对照
  9. NIOS II 内核使用 之 代码保存FLASH(EPCSX芯片)
  10. 快速排序的三种分区方法(整理)