思想:
sum
记录牛牛们需要走的距离,前缀和记录 a[i]
扇门 i ~ n
的距离。i = n ~ 2 * n
开始遍历,sum
减去后一个房间牛牛走过的距离,再加上该房间牛牛走到 i + n
的距离。ans = min(ans, sum)
即可。代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 3;
int a[N];
void solve(){
int n; cin >> n;
LL sum = 0;
for(int i = 1; i <= n; i ++){
cin >> a[i]; a[i + n] = a[i];
sum += a[i] * (i - 1);
}
for(int i = 1; i <= 2 * n; i ++) a[i] += a[i - 1];
LL ans = 0x3f3f3f3f;
for(int i = n + 1; i <= 2 * n; i ++){
sum = sum + n * (a[i] - a[i - 1]) - (a[i] - a[i - n]);
ans = min(ans, sum);
}
cout << ans << endl;
}
int main(){
solve();
return 0;
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有