問題
提出
方針
注意ケース
- 全力で左を伸ばしに行くのではなく、1発目で右側にも少し伸ばしておいたほうがいい場合がある
- 左から攻めると3回だけど、右から攻めると2回になる
振り返り
- 証明ができていない
- 左右両方からやってminを取るのは2倍時間がかかっていまう
- 何度かWAして、テストケースの漏れに気づく。ペナルティのある環境では望ましくない
2020/10/30
ll f(VI A, ll K){
ll N = A.size();
ll idx = -1;
rep(i,N){
if(A[i]==1){
idx=i;break;
}
}
ll right_space = N-1-idx;
ll num = (right_space+K-2)/(K-1);
ll len = num * (K-1);
ll surplus = len-right_space;
ll left_space = idx;
left_space -= surplus;
if(left_space<=0){
return num;
}
ll num2 = (left_space+K-2)/(K-1);
return num+num2;
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll N,K;
cin>>N>>K;
VI A(N);
rep(i, N) cin >> A[i];
ll a = f(A,K);
reverse(ALL(A));
ll b = f(A,K);
ll ans = min(a,b);
p(ans);
return 0;
}