有一个环形的公路,上面共有站,现在给定了顺时针第站到第站之间的距离(特殊的,也给出了第站到第 1 站的距离)。小美想沿着公路第站走到第站,她想知道最短的距离是多少?
区块链毕设网qklbishe.com为您提供问题的解答
有一个环形的公路,上面共有站,现在给定了顺时针第站到第站之间的距离(特殊的,也给出了第站到第 1 站的距离)。小美想沿着公路第站走到第站,她想知道最短的距离是多少?
importsys n = sys.stdin.readlines() num_station = int(n[0]) dist = n[1].strip().split() mindist = n[2].strip().split() start = int(mindist[0]) end = int(mindist[1]) res = float("inf") res2 = float("inf") res3 = float("inf") res4 = float("inf") ifstart > end: res2 = 0 res3 = 0 fori in range(start-1,num_station): res2 += int(dist[i]) fori in range(0,end-1): res2 += int(dist[i]) start,end = end,start fori in range(start-1,end-1): res3 += int(dist[i]) else: res = 0 res4 = 0 fori in range(start-1,end-1): res += int(dist[i]) start,end = end,start fori in range(start-1,num_station): res4 += int(dist[i]) fori in range(0,end-1): res4 += int(dist[i]) final= min(res,res2,res3,res4) print(final)
编辑于 今天 18:34:57
#include <cstdio> #include <iostream> #include <vector> using namespace std; int main() { int n; scanf("%d", &n); vector<int> a(n + 1, 0); vector<long long> b(n + 1, 0); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); b[i] = b[i - 1] + a[i]; } int x, y; scanf("%d %d", &x, &y); int result = 0; // 顺时针走 if (y >= x) printf("%lld", min(b[y - 1] - b[x - 1], b[n] - (b[y - 1] - b[x - 1]))); else printf("%lld", min(b[x - 1] - b[y - 1], b[n] - (b[x - 1] - b[y - 1]))); return 0; }
57:47
package main import ( "fmt" ) func main() { var n int fmt.Scan(&n) dis := make([]int, n) for i:=0; i<n; i++ { var d int fmt.Scan(&d) dis[i] = d } var start, end int fmt.Scan(&start, &end) if start > end { start, end = end, start } // 正向走 sumZ := 0 for i:=start; i<end; i++ { sumZ += dis[i-1] } // 反向走 sumF := 0 // 1. 从 end 到最后 for i:=end; i<=n; i++ { sumF += dis[i-1] } // 2. 从 1 到start for i:=1; i<start; i++ { sumF += dis[i-1] } if sumF < sumZ { fmt.Println(sumF) } else { fmt.Println(sumZ) } }
13:02
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
int N, tmp, x, y;
cin >> N;
vector<int> arr;
arr.resize(N);
for (int i = 0; i < N; ++i) {
cin >> tmp;
arr[i] = tmp;
}
cin >> x >>y;
vector<int64_t> presum;
presum.reserve(N + 5);
presum.push_back(0);
for (int i = 0; i < N – 1; ++i) {
presum.push_back(0LL + arr[i] + presum.back());
}
if (x > y) {
swap(x, y);
}
int64_t len1 = presum[y – 1] – presum[x – 1];
int64_t len2 = presum.back() – presum[y – 1] + presum[x – 1] + arr.back();
cout << min(len1, len2) <<endl;
}
// 64 位输出请用 printf("%lld")
09:28
以上就是关于问题有一个环形的公路,上面共有站,现在给定了顺时针第站到第站之间的距离(特殊的,也给出了第站到第 1 站的距离)。小美想沿着公路第站走到第站,她想知道最短的距离是多少?的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训