- 题解
Circular Barn
- @ 2024-10-8 21:49:57
传送门
#include<bits/stdc++.h>
#define qwq long long //自定义
using namespace std;
const int N=1010; //常量
int n,r[N]; //定义
int shortest_route(int i){ //寻找当前所用距离
int sum=0; //记录当前所用距离
for(int j=0;j<n;j++){ //遍历
sum+=j*r[(i+j)%n]; //推出来的公式
}
return sum; //返回当前所用距离
}
int main(){
// freopen("cbarn.in","r",stdin); io比赛
// freopen("cbarn.out","w",stdout); io比赛
cin>>n; //输入
for(int i=0;i<n;i++) cin>>r[i]; //输入
int res=INT_MAX; //用来找最小值,INT_MAX是指int的最大范围
for(int i=0;i<n;i++){ //n的范围只有100,可以直接暴力
res=min(res,shortest_route(i)); //去比较每个入口要走的距离
}
cout<<res;
return 0;
}
公式:
设 i,j 下标的起始都为 0,第 i 个牛棚中所需要的牛为 xi
i 为牛棚的位置
j 可以看成是当前开的外侧的门相对于 0 号外门的逆时针偏移量
(i + j) 可以看作是第 i 个牛棚到距离 0 号位置逆时针 j 个距离的距离
由于是一个环,会绕回到原地,距离其实为0,但 (i + j) 会等于 n 所以距离为 (i + j) % n
例如 j = 1 时:
0 号位置相对于 4 号位置的距离为 (0 + 1) % 5 = 1
1 号位置相对于 4 号位置的距离为 (1 + 1) % 5 = 2
2 号位置相对于 4 号位置的距离为 (2 + 1) % 5 = 3
3 号位置相对于 4 号位置的距离为 (4 + 1) % 5 = 4
4 号位置相对于 4 号位置的距离为 (4 + 1) % 5 = 0
2 条评论
-
彭诗皓 LV 5 @ 2024-10-10 21:03:373 号位置相对于 4 号位置的距离不应该是(3+1)%5=4吗?
-
@ 2024-10-10 20:34:44发这里干嘛
- 1