PAT1046题解
Posted dcklm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT1046题解相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<math.h> using namespace std; const int INF = 1e9; const int MAXN = 3*1e5; int cost[MAXN], val[MAXN]; int N, num, a, b; int main() { cin >> N; for(int i = 1; i <= N;i++) { cin >> num; val[i] = val[N+i] = num; } for(int i = 1; i <= 2*N; i++) { cost[i] = val[i] + cost[i-1]; } cin >> num; while(num--) { cin >> a >> b; if(abs(a-b) == 1) { int temp = min(a,b); cout << val[temp] << endl; }else { if(a > b) swap(a,b); int temp = min(cost[b-1] - cost[a] + val[a], cost[N+a-1] - cost[b] + val[b]) ; cout << temp << endl; } } }
对于循环数组,可以将数组复制一倍。 思路源自 首位相连的数组的最大连续子段和
以上是关于PAT1046题解的主要内容,如果未能解决你的问题,请参考以下文章
PAT甲级1046 Shortest Distance (20 分)
PAT——甲级1046S:shortest Distance