タイトルリンク:https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id = 1277
トピック
Erは肉を食べるのが好きです。部屋はn個あり、各部屋は肉です。Erがi番目の部屋からi +1番目とi-1番目の部屋まで歩くのに1単位の時間がかかります。彼が肉片を食べるのにかかる。1単位時間。彼はちょうどx番目の部屋で始めて、尋ねました:彼が少なくともすべての肉を食べるのにどれくらい時間がかかりますか?
范围:(2 <= n <= 100、1 <= x <= n、0 <= ai <= 1000)
アイデア
部屋の肉は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;
}