作为当代建筑的爱好者,农夫约翰建造了一个完美圆环形状的新牛棚。
牛棚内部有 nn 个房间,围成一个环形,按顺时针编号为 1∼n1∼n,所有相邻房间之间的距离均为 11。
每个房间都既有通向相邻两个房间的门,也有通向牛棚外部的门。
约翰想让第 ii 个房间内恰好有 riri 头牛。
为了让奶牛们有序的进入牛棚,他计划打开一个外门,让牛从该门进入。
然后,每头牛顺时针(即当 i
请确定他的奶牛需要行走的最小总距离。
输入格式
第一行包含整数 nn。
接下来 nn 行,包含 r1,…,rnr1,…,rn。
输出格式
数据范围
3≤n≤10003≤n≤1000,
1≤ri≤1001≤ri≤100
输入样例:
输出样例:
样例解释
最佳方案是让奶牛们从第二个房间进入。

#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1010;int r[N];int s[N];int n;int main() {cin >> n;for (int i = 0; i < n; ++i) {cin >> r[i];s[i+1] = s[i] + r[i];}//p0int p0 = 0;for (int i = 1; i < n; ++i) p0 += r[i] * i;int res = p0;//pi = pi-1 - s[n] + n*ri-1//pi = p0 - i * s[n] + n * s[i];for (int i = 1; i < n; ++i) {int pi = p0 - i * s[n] + n * s[i];res = min(res,pi);}cout << res << endl;return 0;}
