题解:B4217 [常州市程序设计小能手 2023] 奶牛农场

· · 题解

题目传送门

Solution

这题我的思路是贪心,首先在 a_i=0 的时候我们将 a_i 设为 a_{i+1}-1。接下来我们扫一遍整个 a 数组,如果 a_i \le a_{i-1} 或者 a_i>10^9 时,那么我们就输出 NO。如果每个数都符合条件,那么就输出 YES 和 a 数组就行了。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,a[N];
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(!a[i]) a[i]=a[i-1]+1;
    }
    for(int i=1;i<=n;i++)
        if(a[i-1]>=a[i]||a[i]>1000000000){
            cout<<"NO\n";
            return 0;
        }
    cout<<"YES\n";
    for(int i=1;i<=n;i++)
        cout<<a[i]<<" ";
    return 0;
}