- Quiz
- AC
- 解法
- 最大ジャンプを繰り返した場合、その長さの川まで渡れるかは求められる。それが足りないならNO
- 足りている場合、platformの間隔を詰めることが問題になる
- M+1回ジャンプするが、ジャンププランの初期値は最大距離ジャンプにしておき、余分な分を削ってジャンプすればいい
- 計算量はO(N)
int main(){
ll N,M,D;
cin>>N>>M>>D;
VI C(N);
rep(i, N) cin >> C[i];
ll space = D-1;
ll longest = space*(M+1) + SUM(C);
if(longest<N) no();
ll surplus = longest-N;
VI J(M+1, D-1);
rep(i,M+1){
if(surplus){
ll v = min(J[i], surplus);
J[i] -= v;
surplus -= v;
}
}
VI Ans(N, -1);
ll pos=-1;
rep(i,M){
pos += J[i]+1;
rep(j,C[i]){
Ans[pos]=i;
pos++;
}
pos--;
}
p_yes();
print_vector(Ans);
return 0;
}