3.1 简单模拟
3.1 简单模拟
http://codeup.cn/contest.php?cid=100000575
E Shortest Distance

题目释义
给出一个简单周期的高速公路上的N个出口,找出任何一对出口之间的最短距离。
输入第一个N,接下来N个为Di,表示第i个和第i+1个出口之间的距离,DN表示第N个和第1个出口之间的距离。
给出M,接下来M组是要求最点距离的两个出口。
题目解析
以样例输入为例,表示有5个出口,各自距离如👇所示:

我们可以把1出口到各个出口i间的距离纪录在数组a[i]中,为了方便这里不用a[0],显然a[1]=0。记录环形总长sum。
要求距离的start出口、end出口,有以下情况(假设end>start):
- 其中一个为1,即求1出口到其他出口的最短距离,即max
- 没有一个为1,则求max
代码
#include <cstdio>
int main() {
int a[100005] = {0};
int n, m, temp, sum = 0;
scanf("%d", &n);
for (int i = 2; i <=n; i++) { //为了点后续计算方便,a[0]没有用,a[i]表示1到i点的距离,a[1]=0
scanf("%d", &temp);
sum += temp;
a[i] = sum;
}
scanf("%d", &temp);
sum+=temp;
scanf("%d", &m);
int start, end, ans, t2;
for (int i = 0; i < m; i++) {
scanf("%d %d", &start, &end);
if (start > end) {
t2 = end;
end = start;
start = t2;
}
if (start == 1) ans = a[end] < (sum - a[end]) ? a[end] : (sum - a[end]);
else ans = (a[end] - a[start]) < (sum - a[end] + a[start]) ? (a[end] - a[start]) : (sum - a[end] + a[start]);
printf("%d\n",ans);
}
return 0;
}
本文作者:Joey-Wang
本文链接:https://www.cnblogs.com/joey-wang/p/14541159.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步