(3.1E)Shortest Distance (20)
题目:
样例:
这道题我最开始写的代码在更正过一些小问题后如下:
#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)相关推荐
- 【测试点2超时问题】1046 Shortest Distance (20 分)_21行代码AC
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 The task is really simple: given N exits on a highway which forms ...
- 【PAT甲级 环最短距离】1046 Shortest Distance (20 分) Java、C++
题目 这题是给你一个环,让你计算两点之间最短距离. 环的任意两点就两条路,只要算出环长和任意一条路的大小,另一条就出来了 时间复杂度O(N) 提前计算前缀长度和即可 题解 C++ 全部测试点通过 #i ...
- 1046 Shortest Distance (20 分)【难度: 简单 / 知识点: 前缀和 / 破环成链】
https://pintia.cn/problem-sets/994805342720868352/problems/994805435700199424 对于环这种情况,开两倍的数组即可. #inc ...
- 1046 Shortest Distance (20分)测试点分析
这个题目首先在读题的时候我就感受到了效率问题,第一提供的点的个数非常多,10^5数据量,其次又提供了 10的4次方的查询,如果不是线性复杂度,肯定有后面的测试点要超时. 题目思想很巧妙,我趴在床上分析 ...
- LeetCode 613. Shortest Distance in a Line --SQL
LeetCode 613. Shortest Distance in a Line --SQL LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专栏里,大部 ...
- Leetcode PHP题解--D49 821. Shortest Distance to a Character
D49 821. Shortest Distance to a Character 题目链接 821. Shortest Distance to a Character 题目分析 给定一个字符串s和一 ...
- Shortest Distance from All Buildings
Shortest Distance from All Buildings 题目链接:https://leetcode.com/problems... 这道题要求最短的距离,一般这种要求可以到的地方的距 ...
- PAT甲级1046 Shortest Distance:[C++题解]前缀和
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 用前缀和快速求出一段的和.注意求两段,取最小值. ac代码 #include<bits/stdc++.h> using ...
- 【Leetcode_easy】821. Shortest Distance to a Character
problem 821. Shortest Distance to a Character 参考 1. Leetcode_easy_821. Shortest Distance to a Charac ...
最新文章
- 无线传感器网络协议与体系结构 思维导图 (book) Protocols and Architectures for Wireless Sensor Networks, Holger Karl
- Jenkins使用遇到的问题总结
- 《啊哈!算法》笔记_Day02
- vim 改变当前工作路径和创建文件夹
- 【机器学习基础】数学推导+纯Python实现机器学习算法19:PCA降维
- 完全复制 mysql,MySQL完全复制表结构
- 程序开发天团必备单品,稳定输出还加持千元商务礼限时送!
- 走近华为“天才少年”钟钊:入职两年两度突破业界学界极限
- Get AD Object and disable move delete AD account script 查询删除AD账户计算机
- 百度云盘免下载百度云盘全速下载方法
- 解决Windows上编译PHP7.1拓展的错误
- 迭代器模式C++实现
- [CEOI2008]order
- 谁会成为中国互联网下一代英雄
- JAVA菜鸟的第一天
- e.target的用法
- NEON码农指导 Chapter 4 : NEON Intrinsics
- usercity 小程序_微信小程序API 用户信息 wx.getUserInfo(OBJECT)
- 如何通过QA质量管理提高软件质量?
- Oracle PL/SQL 源代码加密实战