제목 링크 : https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1277
이야기
어는 고기를 먹는 것을 좋아합니다. n 개의 방이 있고 각 방은 고기 조각입니다. 어가 i 번째 방에서 i + 1 번째와 i-1 번째 방까지 걸어가는 데 1 단위 시간이 걸립니다. 고기 한 조각을 먹으려면 1 단위가 걸립니다. 그는 방금 x 번째 방에서 시작하여 물었습니다. 최소한 모든 고기를 먹는 데 얼마나 걸릴까요?
范围 : (2 <= n <= 100 , 1 <= x <= n , 0 <= ai <= 1000)
아이디어
방 고기가 0 일 수 있으므로 먼저 왼쪽과 오른쪽이 0이 아닌 경계를 결정한 다음 앞뒤로 실행합니다.
ac 코드
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, x;
int a[105];
while(cin >> n >> x){
int sum = 0;
for(int i = 1; i <= n; i ++){
scanf("%d", &a[i]);
sum += a[i];
}
int l = 1, r = n;
while(l <= n && a[l] == 0) l ++;
while(r >= 1 && a[r] == 0) r --;
if(l == n + 1){ //说明都是0,那么就不用来回走了
puts("0");
continue;
}
//sum是吃肉时间,r-l是走完全程时间,r-x是往右跑回来的时间,x-l是网走跑回来的时间
cout << sum + r - l + min(r - x, x - l) << endl;
}
return 0;
}